C 結構中的記憶體對齊
在計算中,記憶體對齊是指資料可以儲存在記憶體中的位址進行的限制。了解記憶體對齊對於優化程式碼效能和避免意外行為至關重要。
問題陳述:
您正在使用通常需要記憶體對齊的 32 位元系統設定為 4 位元組。考慮以下結構:
<code class="c">typedef struct { unsigned short v1; unsigned short v2; unsigned short v3; } myStruct;</code>
該結構包含三個 2 位元組字段,但使用 sizeof 運算子傳回 6 個位元組,而不是預期的 8 個位元組。相反,以下結構體:
<code class="c">typedef struct { unsigned short v1; unsigned short v2; unsigned short v3; int i; } myStruct;</code>
傳回 12 位元組的大小,正如欄位數量增加和填充潛力所預期的那樣。為什麼結果大小有差異?
解釋:
在大多數機器上,資料類型對齊到不大於其大小的邊界。在這種情況下,short 是 2 個位元組,int 是 4 個位元組。
第一個結構:
第二個結構體:
以上是為什麼具有 3 個短整數的 C 結構的大小為 6 個位元組,而添加一個整數的類似結構的大小為 12 個位元組?的詳細內容。更多資訊請關注PHP中文網其他相關文章!