Tamaño de una estructura

26/02/2004 - 01:19 por Aldo S. | Informe spam
Hola,

Cual es la mejor manera de saber el tamaño de una estructura ? Usando
Marshal.SizeOf() ? ejemplo:

public struct MyRectangle
{
public double Xmin;
public double Ymin;
public double Xmax;
public double Ymax;

public static int Size()
{
return Marshal.SizeOf(typeof(double)) * 4;
}
}

Hay estructuras en las que tengo tambien enumeraciones y estas muestran un
error con Marshal.SizeOf())

Como calculo el tamaño de la estructura en managed code ?

O simplemente basta con hacer algo como esto ?

public struct MyRectangle
{
public double Xmin;
public double Ymin;
public double Xmax;
public double Ymax;

public static int Size()
{
return 8 * 4;
}
}

Gracias
Alfonso Moreno

Preguntas similare

Leer las respuestas

#1 Aldo S.
26/02/2004 - 04:13 | Informe spam
Hola,

Gracias por la respuesta.

private enum SGEntityID : byte {Rectangle, Polyline, Polygon};

private struct MyRectangle
{
public double xmin;
public double ymin;
public double xmax;
public double ymax;
public SGEntityID EntityID;
}

Esto da error:

MessageBox.Show(Marshal.SizeOf(typeof(SGEntityID)).ToString());


Sin embargo, esto no da error:

MessageBox.Show(Marshal.SizeOf(typeof(MyRectangle)).ToString());

Pero, en este ultimo caso, el resultado es 40, no obstante la enumeracion
esta definida como byte. Tengo que definir algun atributo en la estructura o
algo asi ?

Saludos,
Aldo,



"Crosio, Pablo" wrote in message
news:uv4q0PB$
Mostrar la cita
un
Mostrar la cita
#2 Crosio, Pablo
26/02/2004 - 04:15 | Informe spam
"Aldo S." wrote in message
news:uY6ve4$#
Mostrar la cita
#3 Crosio, Pablo
26/02/2004 - 04:17 | Informe spam
aldo

no entiendo porque te da el error, yo lo haria asi:


public struct MyRectangle
{
public double Xmin;
public double Ymin;
public double Xmax;
public double Ymax;

public static int Size()
{
return Marshal.SizeOf(typeof(MyRectangle));
}
}

salu2!!

pablo

"Aldo S." wrote in message
news:uY6ve4$#
Mostrar la cita
#4 pablo crosio
26/02/2004 - 21:07 | Informe spam
Aldo:

SizeOf devuelve el tamaño "no manejado" de un tipo de
datos con el objetivo de realizar marshaling... por
ejemplo pasar datos desde codigo manejado a no manejado...

El tema de que te de 40 y no 33 es por un tema de
alineamiento de las estructuras, esto viene de C y depende
ademas de los compiladores... lo que se esta haciendo es
completar (padding) el ultimo miembro para llegar a un
multiplo de 8 bytes...

¿Que es especificamente lo que necesitas hacer?

Salu2!!

Pablo

Mostrar la cita
Polygon};
Mostrar la cita
(SGEntityID)).ToString());
Mostrar la cita
(MyRectangle)).ToString());
Mostrar la cita
obstante la enumeracion
Mostrar la cita
en la estructura o
Mostrar la cita
message
Mostrar la cita
estructura ? Usando
Mostrar la cita
enumeraciones y estas muestran
Mostrar la cita
code ?
Mostrar la cita
#5 Octavio Hernandez
27/02/2004 - 23:27 | Informe spam
Aldo,

Es normal que el tamaño sea 40, porque por defecto los campos de una struct
se ajustan a fronteras de 8 bytes. Si te interesa que las instancias de una
estructura ocupen el mínimo espacio en memoria, debes asociarle a la
estructura el atributo StructLayout(), pasándole el valor Sequential al
parámetro LayoutKind y el valor 1 al campo Pack.

Saludos,

Octavio Hernandez

"Aldo S." escribió en el mensaje
news:uQFsxZB$
Mostrar la cita
o
Mostrar la cita
muestran
Mostrar la cita
Ads by Google
Search Busqueda sugerida