位址對其小筆記

2021-06-01 10:08:04 字數 391 閱讀 9323

為了作業系統訪問記憶體資料的效率,編譯器編譯的時候根據相應的資料型別進行位元組進行對其,這些對應用程式設計師完全透明的,所以我們經常忽視其背後的細節,結構體或者列舉型別總的大小都必須是佔空間最大成員的空間的整數倍(向上取整,零頭的記憶體並不使用),並且每個資料成員起始位址都與其所佔大小相對應,第乙個資料成員預設偏移為0,後續的資料成員的偏移與其資料型別有關,這樣結構體所佔空間大於理論計算出的使用空間;下面是個簡單的例子

struct stru1

char a;

int b;

short c;

struct stru2

short c;

char  a;

int     b;

sizeof(stru1)=12  而 sizeof(stru2)=8

關於記憶體對其問題 三

第一種情況 struct bbb long num 4bytes char name 4 bytes short int data 2 bytes char ha 1 byte short ba 5 10 bytes sizeof bbb 24bytes 理由 1.很容易知道bbb的記憶體對齊數是4...

pragma pack n 與記憶體對其問題

title pragma pack n 與記憶體對其問題 date 2016 06 08 15 32 11 categories c tags c c 記憶體對齊 pragma pack 作用 遮蔽掉編譯器為變數設定的預設的對其方式,設定自己的對其方式 而 pragma pack n 表示設定變數以...

c語言位元組對其問題

最近除錯網路的服務端程式,自己寫了乙個小客戶端程式來測試,發現服務程式解包錯誤。經除錯發現客戶端的協議頭大小和伺服器端的協議頭大小不一致。原因是伺服器端加了 pragma pack 1 而客戶端沒加。之前沒接觸過這個編譯巨集,現在來認真學習之。首先google之 原來 pragma pack有幾種形...