Por que sizeof para struct não é igual à soma do sizeof de seus membros?
Olá, colegas! Sou novo em C++ e recentemente me deparei com um comportamento inesperado. Tenho uma struct simples:
```cpp
struct MyStruct {
char a; // 1 byte
int b; // 4 bytes
short c; // 2 bytes
};
```
É lógico supor que sizeof(MyStruct) será igual a 1 + 4 + 2 = 7 bytes. Mas quando exibo o tamanho via `std::cout`, o compilador mostra 12 bytes! Por que isso? Já que não estou usando funções virtuais ou herança. Testei em diferentes compiladores (GCC, MSVC) — em todos é o mesmo. Além disso, se eu mudar a ordem dos campos, o resultado muda. Por exemplo, se colocar `int` primeiro, o tamanho se torna 8 bytes. Que mágica é essa? É algum bug do compilador ou estou perdendo algo? Expliquem, por favor, como sizeof funciona para structs e como prever o tamanho real. Desde já, obrigado!
<<>>
Por que sizeof para struct é maior que a soma dos tamanhos dos campos?
Isso não é um bug, mas uma característica do funcionamento do processador e do compilador, chamada de alinhamento de memória.