Considere estos tipos:¿Se puede configurar la "optimización de base vacía" en GCC?
struct A {};
struct B : A { int i; };
sizeof(A) > 0
como lo exige la norma.
sizeof(B)
debe ser 4 debido a la optimización de base vacía. Sin embargo, en GCC 4.1.1 es 5 (estoy usando un paquete de 1 en esta área). Y de forma inconsistente: algunos de mis archivos lo están obteniendo, otros no. No puedo estar seguro de cuáles son las diferencias todavía, tenemos un gran impacto.
En los otros tres compiladores que estoy usando (por Microsoft y Freescale), no tengo este problema. La optimización de la base vacía es opcional, aparentemente, de acuerdo con this article.
¿Hay una opción de compilador o pragma para sintonizar esto en GCC 4.1.1? Puedo solucionar el problema, pero me gustaría entender qué está pasando primero. Busqué en Google por un tiempo y parece que no puedo encontrar nada.
Compilador de Intel lo hace bien, así como GCC. MSVC es demasiado activo y viola los estándares en la optimización de base vacía cuando una de las clases base también es una clase base del primer miembro. He publicado reglas mucho más exhaustivas para las reglas de base vacía de VC++ (2005/2008) y GCC (4.1.1). http://stackoverflow.com/questions/547290/is-the-empty-base-optimization-in-gcc-configurable/919694#919694 – Adisak