簡單解釋 C C 位元組對齊

2021-05-28 15:23:33 字數 417 閱讀 1026

首先,引入兩個概念「資料型別大小」和「指定對齊值」:

資料型別大小:char 為 1 個位元組,short 為 2 個位元組,int 為 4 個位元組,double為 8 個位元組等等;

指定對齊值:#pragma pack (value) 所指定的對齊的值,例如 g++ 4.5.2 x86 預設值為 4;

引入乙個重要的概念——有效對齊值 n:

有效對齊值 n= min( (1), (2)),即:「資料型別大小」與「指定對齊值」的最小值

在 c / c++ 語言中,需要同時滿足如下a、b兩個條件:

例如:

struct a ;
筆者機器的預設指定對齊值為4,分析:

所以,上述結構體總共大小為 24 個位元組。

C C 位元組對齊

什麼是對齊,以及為什麼要對齊 現代計算機中記憶體空間都是按照byte劃分的,從理論上講似乎對任何型別的變數的訪問可以從任何位址開始,但實際情況是在訪問特定變數的時候經常在特定的記憶體位址訪問,這就需要各型別資料按照一定的規則在空間上排列,而不是順序的乙個接乙個的排放,這就是對齊。對齊的作用和原因 各...

c c 位元組對齊

什麼是對齊,以及為什麼要對齊 現代計算機中記憶體空間都是按照byte劃分的,從理論上講似乎對任何型別的變數的訪問可以從任何位址開始,但實際情況是在訪問特定變數的時候經常在特定的記憶體位址訪問,這就需要各型別資料按照一定的規則在空間上排列,而不是順序的乙個接乙個的排放,這就是對齊。對齊的作用和原因 各...

C C 位元組對齊

概念 對齊跟資料在記憶體中的位置有關。如果乙個變數的記憶體位址正好位於它長度的整數倍,他就被稱做自然對齊。比如在32位cpu下,假設乙個整型變數的位址為0x00000004,那它就是自然對齊的。為什麼位元組需要對齊 根本原因在於cpu訪問資料的效率問題。假設上面整型變數的位址不是自然對齊,比如為0x...