A menos que sea un gran tipo de valor o tipo de instancia (es decir, muchos miles de campos), los únicos tipos de los que debe preocuparse son las grandes matrices o cadenas. Por supuesto, para determinar el tamaño de una matriz, necesita saber el tamaño del elemento.
.NET (actualmente) alinea los tipos casi de la misma manera que los compiladores nativos alinean los tipos. tipos fundamentales tienen alineaciones naturales que son por lo general la potencia integral redondeado en marcha de dos más cercanos a su tamaño:
Single, Int32, UInt32 - 4
IntPtr, UIntPtr, pointers, references - 4 on 32-bit, 8 on 64-bit
Double, Int64, UInt64 - 8
Char, Int16, UInt16 - 2
Byte, SByte - 1
En el montaje de un tipo, el compilador se asegurará de que todos los campos de cualquier tipo dado tienen su desplazamiento inicial dentro de la instancia alineada a un límite que coincida con ese tipo, suponiendo que el diseño explícito no se esté utilizando.
Los tipos definidos por el usuario tienen una alineación, que se calcula como la alineación más alta de cualquiera de sus tipos de campo. El tamaño del tipo se amplía si es necesario para que el tamaño del tipo también esté alineado.
Pero, por supuesto, todos los tipos de referencia siguen teniendo tamaño y alineación IntPtr.Size, por lo que el tamaño del tipo de referencia no afectará a las matrices de ese tipo.
Tenga en cuenta que el CLR puede elegir, a su discreción, tipos de diseño diferentes a los descritos anteriormente, tal vez para aumentar la localidad de caché o reducir el relleno requerido por la alineación.
Pregunta relacionada: [sizeof Equivalente para tipos de referencia] (http://stackoverflow.com/questions/26570/sizeof-equivalent-for-reference-types) –
Consulte esta pregunta, [Cómo obtener el tamaño de un campo en bytes con C#] [1], y en particular [Respuesta de Jon Skeets] [2] Básicamente, no es * tan simple como ... * [1]: http://stackoverflow.com/questions/207592/getting-the -size-of-a-field-in-bytes-with-c [2]: http://stackoverflow.com/questions/207592/getting-the-size-of-a-field-in-bytes-with -C# 207605 –