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.

Preguntas similare

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.


Respuesta Responder a este mensaje
#2 Pedro Luna Montalvo, MVP
30/09/2004 - 00:15 | Informe spam
En otras palabras, los tipos por valor guardan sus datos en el stack.

Por el contrario, los tipos por referencia guardan siempre sus datos en el
heap, aun cuando los campos del mismo sean de tipo por valor.

Saludos
Pedro Luna, MVP
Gye, Ecu

"David Salgado,MVP" escribió en el mensaje
news:
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.
>
>


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida