Si un int toma 4 bytes, ¿por qué System.Int32 toma 24 bytes cuando encajona un entero en un objeto?
Por ejemplo:
int i = 3; object o = i;En C#/CLR, los tipos de referencia tienen una sobrecarga de tamaño :
El diseño de un objeto administrado es bastante simple: un objeto administrado contiene datos de instancia, un puntero a metadatos (también conocido como puntero de tabla de métodos) y una bolsa de información interna también conocida como encabezado de objeto.
Entonces, cuando coloque su int en el montón, se almacenará como un tipo de referencia e incluirá toda la información adicional y luego la memoria se alineará, lo que dará como resultado algo como esto:
Object Header (8 bytes) Method Table Pointer (8 bytes) Int (4 bytes) padding (4 bytes, to align at 8 bytes)Tenga en cuenta que esto depende del bitness del proceso (el desglose anterior es para el caso de 64 bits) y en realidad es un detalle de implementación en tiempo de ejecución (el artículo vinculado anteriormente menciona al menos una implementación que difiere ).