Die Strukturen sind auf die Größe des "größten Wortes" gepackt. Zum Beispiel, wenn Sie eine solche Struktur haben:
struct ThreeBytes {
char one;
short two;
};
Seine Größe wird 4 Bytes sein, weil Feld one
auf die Größe des Kurzschlusses aufgefüllt wird, das heißt, es wird nicht verwendet Byte danach abgelegt. Wenn two
ein int
wäre, wird die Struktur eine Größe von zwei int
s haben. Dies geschieht, wenn Sie Ihre Struktur, dass ausrichten:
// this structure got size of 4 bytes.
struct ThreeBytes {
char one;
char two;
short three;
};
Und das ist unaligned ein:
// This structure will have size 6
struct ThreeBytes {
char one;
short two;
char three;
};
Dieses Standardverhalten ist, gibt Compiler-Direktiven sind, die Veränderungen ermöglichen Verpackung (siehe #pragma pack
, zum Beispiel, Compilermittel können unterschiedlich sein). Im Wesentlichen können Sie die Einheit festlegen, auf welche Felder gepolstert werden soll, oder das Padding deaktivieren, indem Sie ihn auf 1 setzen. Aber einige Plattformen erlauben das überhaupt nicht.
Ihre Struktur enthält mehr als nur einen int, plus padding/alignment. – VTT
Können Sie erklären, wie es bis zu 16 Bytes macht? –
* "Die Größe von int ist 4 Bytes." * - Zählen Sie nicht darauf, dass es immer wahr ist. Zählen Sie auch nicht auf Zeigergrößen, die 0 sind. – StoryTeller