Avatar ·

Por que sizeof(estrutura) não é igual à soma de sizeof de todos os seus campos em C++?

Olá! Comecei a estudar C++ e me deparei com um comportamento estranho. Tenho uma estrutura simples:\n\n```cpp\nstruct MyStruct {\n char c; // 1 byte\n int i; // 4 bytes\n short s; // 2 bytes\n};\n```\n\nLogicamente, espero que o tamanho dessa estrutura seja 1 + 4 + 2 = 7 bytes. No entanto, quando exibo `sizeof(MyStruct)`, o compilador mostra 12! Por que isso acontece? Testei com diferentes ordens dos campos, e o tamanho muda. Por exemplo, se eu colocar `int` primeiro, o tamanho às vezes se torna 8. Isso é algum bug do compilador ou estou entendendo algo errado? Explique, por favor, como realmente funciona a alocação de memória para estruturas em C++.\n<<>>\n

Por que o tamanho da estrutura é maior que a soma de seus campos?

\n

Não, isso não é um bug do compilador. É uma característica do gerenciamento de memória chamada alinhamento (alignment) e preenchimento (padding). O processador não lê a memória byte a byte — ele trabalha com blocos de dados, cujo tamanho geralmente é 4 ou 8.