Avatar ·

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.