首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C/C++ 內存對齊詳解

     編輯:關於C++

什麼是內存對齊

為提高 CPU 內存存取效率,編譯器按特定規則安排變量地址。如 int (4 字節) 地址若非 4 的倍數,需兩次總線讀取並拼裝,效率大降。

對齊規則(理論)

  • 基本類型:對齊值 = sizeof(類型)。
  • 結構體/類:所有成員滿足各自對齊,且結構體大小為最大成員對齊值的整數倍(數組連續存放需求)。
  • #pragma pack(n) 可指定最大對齊值,實際對齊 = min(sizeof(成員), n)。

實例演示

#pragma pack(1)  // 指定 1 字節對齊
struct TEST_A {
    int a;    // sizeof=4, align=min(4,1)=1
    char b;   // sizeof=1, align=1
};            // 大小 = 5,無填充
#pragma pack() // 恢復默認

// 默認對齊 (通常 4/8)
struct TEST_B {
    int a;    // offset 0
    char b;   // offset 4
    // 填充 3 字節
    // 大小 = 8
};

三大原則

  1. 對齊指首地址對齊,非大小對齊。
  2. 結構體內每個成員需對齊。
  3. 結構體數組要求每個元素對齊,故結構體大小須為對齊值倍數。

理解對齊有助於優化內存佈局、避免跨平台兼容性問題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved