C#, struct, stack y heap...

29/09/2004 - 18:19 por faustino Dina | Informe spam
Hola,

Tengo una duda respecto a cómo C# maneja los struct. Según la documentación
estos son datos que se crean en el stack, en ves de los class que se crean
en el heap. Entonces ¿qué sucede cuando por ejemplo agregamos una variable
tipo struct a una colección?
Por ejemplo:

struct MyStruct
{
public int X;
}

MyStruct s;

ArrayList list = new ArrayList();
list.Add(s);

En C/C++ meter en una colección global una dirección del heap puede conducir
a un error grave. Pero ¿y en C# cómo funciona? En este caso list qué es lo
que almacena? la struct, la referencia al stack o clona s en el heap y
almacena la referencia del heap en la colección?

Gracias
Faustino


Faustino Dina
If my email address starts with two 'f'
drop the first 'f' when mailing me.
 

Leer las respuestas

#1 David Salgado,MVP
29/09/2004 - 19:17 | Informe spam
Al añadir una struct a un array list, se hace un Boxing de
la extructura al tipo de datos object ( que es lo que contiene el
arraylist ). Para que pueda hacerse esto, el CLR clona el tipo valor en el
heap de modo que
queden alineados con el tipo System.Object.

Espero que sirva :D

David Salgado

"faustino Dina" wrote in message
news:%
Hola,

Tengo una duda respecto a cómo C# maneja los struct. Según la
documentación
estos son datos que se crean en el stack, en ves de los class que se crean
en el heap. Entonces ¿qué sucede cuando por ejemplo agregamos una variable
tipo struct a una colección?
Por ejemplo:

struct MyStruct
{
public int X;
}

MyStruct s;

ArrayList list = new ArrayList();
list.Add(s);

En C/C++ meter en una colección global una dirección del heap puede
conducir
a un error grave. Pero ¿y en C# cómo funciona? En este caso list qué es lo
que almacena? la struct, la referencia al stack o clona s en el heap y
almacena la referencia del heap en la colección?

Gracias
Faustino


Faustino Dina
If my email address starts with two 'f'
drop the first 'f' when mailing me.


Preguntas similares