Avatar ·

¿Por qué sizeof(estructura) no es igual a la suma de sizeof de todos sus campos en C++?

¡Hola! Empecé a estudiar C++ y me encontré con un comportamiento extraño. Tengo una estructura simple: ```cpp struct MyStruct { char c; // 1 byte int i; // 4 bytes short s; // 2 bytes }; ``` Lógicamente, espero que el tamaño de esta estructura sea 1 + 4 + 2 = 7 bytes. Sin embargo, cuando imprimo `sizeof(MyStruct)`, ¡el compilador muestra 12! ¿Por qué sucede esto? Verifiqué con diferentes órdenes de campos y el tamaño cambia. Por ejemplo, si pongo `int` primero, a veces el tamaño es 8. ¿Es un bug del compilador o hay algo que no entiendo? Explíquenme, por favor, cómo funciona realmente la asignación de memoria para estructuras en C++. <<>>

¿Por qué el tamaño de la estructura es mayor que la suma de sus campos?

No, no es un bug del compilador. Es una característica del manejo de memoria llamada alineación (alignment) y relleno (padding). El procesador no lee la memoria byte por byte — trabaja con datos en bloques, cuyo tamaño suele ser 4 u 8.