¿Por qué C++ no hace la estructura más tensa?
packing (1)
El estándar exige que los miembros de clase y estructura se almacenen en la memoria en el mismo orden en que se declaran. Entonces, en tu ejemplo, no sería posible que d
aparezca antes de b
.
Además, la mayoría de las arquitecturas prefieren que los tipos de múltiples bytes estén alineados en los límites de 4 u 8 bytes. Así que todo lo que puede hacer el compilador es dejar bytes de relleno vacíos entre los miembros de la clase.
Puede minimizar el relleno al reordenar los miembros usted mismo, aumentando o disminuyendo el orden de tamaño. O su compilador podría tener una opción de #pragma pack
o algo similar, que buscará minimizar el relleno a expensas del rendimiento y el tamaño del código. Lee los documentos de tu compilador.
Por ejemplo, tengo una class
,
class naive { public: char a; long long b; char c; int d; };
y de acuerdo con mi programa de pruebas, a
a d
se construyen una tras otra, como
a------- bbbbbbbb c---dddd
-
significa no utilizado.
¿Por qué no C ++ lo hace más apretado, como
ac--dddd bbbbbbbb