2010-03-10 20 views
6

Lea la definición de Marshal.SizeOf(). Dice esto: The size returned is the size of the unmanaged object. The unmanaged and managed sizes of an object can differ. ¿Eso significa que Marshal.SizeOf le devolverá el tamaño de la definición pero no el tamaño asignado de la memoria real porque puede haber algo de relleno para la alineación?C# ¿Cuál es el tamaño del objeto no administrado?

Por ejemplo:

struct MyStruct 
{ 
    char c; 
} 

El tamaño será de 1 byte para el objeto no administrado (tamaño no administrado) si uso Marshal.SizeOf() pero puede ser de 2 o 4 bytes para objeto gestionado (tamaño gestionado) si uso sizeof() . ¿Estoy en lo cierto?

Respuesta

1

Simplemente escriba una pequeña aplicación de ejemplo.
MyStruct en su ejemplo tiene un tamaño de 1 en caso administrado y no administrado.
El tamaño real para objetos más complejos puede depender también de elementos como la alineación y otros elementos dependientes del sistema operativo.

2

El único significado de Marshal.SizeOf es el tamaño del bloque de memoria no administrado requerido para el método Marshal.StructureToPtr. SizeOf puede no ser igual al tamaño de la estructura administrada y al tamaño de la estructura no administrada. StructureToPtr puede serializar una estructura con o sin relleno, es detalles internos. SizeOf solo informa cuánta memoria requiere esta operación, y cualquier otra cosa.

Cuestiones relacionadas