首頁 > 後端開發 > C++ > 主體

為什麼具有 3 個短整數的 C 結構的大小為 6 個位元組,而添加一個整數的類似結構的大小為 12 個位元組?

Linda Hamilton
發布: 2024-10-26 13:53:02
原創
578 人瀏覽過

 Why Does a C Structure with 3 Short Integers Have a Size of 6 Bytes, But a Similar Structure with an Integer Added Has a Size of 12 Bytes?

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 個位元組。

  • 第一個結構:

    • 因為所有成員都是 2位元組,結構體與 2 位元組邊界對齊。
    • 成員之間沒有插入填充,導致總大小為 6 個位元組。
  • 第二個結構體:

    • 4 位元組int 的存在要求結構體與4 位元組邊界對齊。
    • 2 個位元組的填充是在 v3 和 i 之間插入以確保正確對齊,使總大小達到 12 個位元組。

以上是為什麼具有 3 個短整數的 C 結構的大小為 6 個位元組,而添加一個整數的類似結構的大小為 12 個位元組?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!