Speicherausrichtung in C-Strukturen
In der Informatik bezieht sich Speicherausrichtung auf die Einschränkungen, die den Adressen auferlegt werden, an denen Daten im Speicher gespeichert werden können . Das Verständnis der Speicherausrichtung ist entscheidend für die Optimierung der Codeleistung und die Vermeidung unerwarteten Verhaltens.
Problemstellung:
Sie arbeiten auf einem 32-Bit-System, bei dem die Speicherausrichtung normalerweise erfolgt auf 4 Bytes eingestellt. Betrachten Sie die folgende Struktur:
<code class="c">typedef struct { unsigned short v1; unsigned short v2; unsigned short v3; } myStruct;</code>
Die Struktur enthält drei 2-Byte-Felder, aber die Verwendung des sizeof-Operators gibt 6 Bytes statt der erwarteten 8 Bytes zurück. Umgekehrt gibt die folgende Struktur:
<code class="c">typedef struct { unsigned short v1; unsigned short v2; unsigned short v3; int i; } myStruct;</code>
eine Größe von 12 Bytes zurück, wie aufgrund der erhöhten Anzahl von Feldern und der Möglichkeit zum Auffüllen zu erwarten ist. Warum gibt es einen Unterschied in den resultierenden Größen?
Erklärung:
Auf den meisten Maschinen sind Datentypen an einer Grenze ausgerichtet, die nicht größer als ihre Größe ist. In diesem Fall beträgt short 2 Bytes und int 4 Bytes.
Erste Struktur:
Zweite Struktur:
Das obige ist der detaillierte Inhalt vonWarum hat eine C-Struktur mit 3 kurzen Ganzzahlen eine Größe von 6 Bytes, eine ähnliche Struktur mit einer hinzugefügten Ganzzahl jedoch eine Größe von 12 Bytes?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!