Avatar ·

¿Por qué sizeof para una estructura no es igual a la suma de sizeof de sus miembros?

¡Hola, colegas! Soy nuevo en C++ y recientemente me encontré con un comportamiento inesperado. Tengo una estructura simple: ```cpp struct MyStruct { char a; // 1 byte int b; // 4 bytes short c; // 2 bytes }; ``` Lógicamente, se podría suponer que sizeof(MyStruct) será 1 + 4 + 2 = 7 bytes. Pero cuando imprimo el tamaño con `std::cout`, ¡el compilador muestra 12 bytes! ¿Por qué? No estoy usando ninguna función virtual ni herencia. Lo probé en diferentes compiladores (GCC, MSVC) y en todos es lo mismo. Además, si cambio el orden de los campos, el resultado cambia. Por ejemplo, si pongo `int` primero, el tamaño se vuelve 8 bytes. ¿Qué magia es esta? ¿Es algún bug del compilador o me estoy perdiendo algo? Expliquen, por favor, cómo funciona sizeof para estructuras y cómo predecir el tamaño real. ¡Gracias de antemano! <<>>

¿Por qué sizeof para una estructura es mayor que la suma de los tamaños de los campos?

Esto no es un bug, sino una característica del funcionamiento del procesador y del compilador, llamada alineación de memoria.