結構體中的位元組對齊 attribute

2021-10-05 03:43:12 字數 709 閱讀 6491

__attribute__ 可以讓結構體成員對齊在n位元組的邊界上.

__attribute__((pack))         //取消優化對齊,按照實際用的位元組數對齊

__attribute__((aligned(4)))    //按照4位元組對齊,其中引數必須是2的冪 ("positive power of 2"

)

舉個栗子:

struct struct1

; struct struct2

__attribute__((pack));

struct struct3

__attribute__((aligned(4)));

struct struct4

__attribute__((aligned(2)));

typedef struct __attribute__((packed)) struct5;

sizeof()出來的結果為

struct1 -> 一般會是5

struct2 -> 5

struct3 -> 8

struct4 -> 8

struct5 -> 5

在一連串的通訊協議中,把一條命令分隔成了結構體管理的時候,需要加上 __attribute__((packed)) 來確保長度的正確。

結構體位元組對齊

include pragma pack 2 struct t.pragma pack int main int argc,char argv 最後輸出的結果為 8。這個表示是按照2位元組來對齊資料,首先分配2位元組給成員變數i,分配完成後,還剩一位元組,zj add補0 沒法容納成員變數d,此時會再...

結構體位元組對齊

include pragma pack 2 struct t.pragma pack int main int argc,char argv 最後輸出的結果為 8。這個表示是按照2位元組來對齊資料,首先分配2位元組給成員變數i,分配完成後,還剩一位元組,zj add補0 沒法容納成員變數d,此時會再...

結構體位元組對齊

在用sizeof運算子求算某結構體所佔空間時,並不是簡單地將結構體中所有元素各自佔的空間相加,這裡涉及到記憶體位元組對齊的問題。從理論上講,對於任何 變數的訪問都可以從任何位址開始訪問,但是事實上不是如此,實際上訪問特定型別的變數只能在特定的位址訪問,這就需要各個變數在空間上按一定的規則排列,而不是...