Avatar ·

Warum sizeof für eine Struktur nicht der Summe der sizeof ihrer Member entspricht?

Hallo, Kollegen! Ich bin neu in C++ und bin kürzlich auf ein unerwartetes Verhalten gestoßen. Ich habe eine einfache Struktur: ```cpp struct MyStruct { char a; // 1 Byte int b; // 4 Bytes short c; // 2 Bytes }; ``` Es wäre logisch anzunehmen, dass sizeof(MyStruct) 1 + 4 + 2 = 7 Bytes beträgt. Aber wenn ich die Größe mit `std::cout` ausgebe, zeigt der Compiler 12 Bytes an! Warum ist das so? Ich verwende doch keine virtuellen Funktionen oder Vererbung. Ich habe es mit verschiedenen Compilern (GCC, MSVC) getestet – überall das Gleiche. Wenn ich die Reihenfolge der Felder ändere, ändert sich das Ergebnis. Zum Beispiel, wenn ich `int` zuerst setze, wird die Größe 8 Bytes. Was ist das für eine Magie? Ist das ein Bug im Compiler oder übersehe ich etwas? Bitte erklärt mir, wie sizeof für Strukturen funktioniert und wie man die tatsächliche Größe vorhersagen kann. Vielen Dank im Voraus! <<>>

Warum ist sizeof für eine Struktur größer als die Summe der Feldgrößen?

Das ist kein Bug, sondern eine Besonderheit der Prozessor- und Compilerarbeit, die als Memory Alignment bezeichnet wird.