Tengo varias estructuras que tienen la disposición secuencial:Marshal.SizeOf en una estructura que contiene GUID da bytes adicionales
struct S1
{
Guid id;
}
struct S2
{
Guid id;
short s;
}
struct S3
{
Guid id;
short s;
short t;
}
Calling Marshal.SizeOf
sobre los tipos struct anteriores, que tengo:
Size:
S1 = 16, as expected.
S2 = 20, copied an instance to a byte array, it only occupies first 18 bytes.
S3 = 20.
Mi pregunta es por eso que el tamaño de S2 es 20 pero no 18. Y este problema solo aparece cuando Guid
está en la estructura.
No se ha encontrado ninguna información útil de msdn. Sé Marshal.SizeOf
da el tamaño del espacio que el tipo ocupará en la memoria, pero quiero saber por qué se merece 2 bytes adicionales para hacer que el tamaño sea un múltiplo de 4.
¿Y cómo puedo evitar este "problema"?
¡Muchas gracias!
Eche un vistazo a @Hans Passant muy detallada [respuesta] (http://stackoverflow.com/a/3362736/1289454) en el diseño de la memoria de Estructura. Él afirma que 'Marhsal.SizeOf' solo puede proporcionar una estimación aproximada. – gowansg