__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在一連串的通訊協議中,把一條命令分隔成了結構體管理的時候,需要加上 __attribute__((packed)) 來確保長度的正確。struct2 -> 5
struct3 -> 8
struct4 -> 8
struct5 -> 5
結構體位元組對齊
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運算子求算某結構體所佔空間時,並不是簡單地將結構體中所有元素各自佔的空間相加,這裡涉及到記憶體位元組對齊的問題。從理論上講,對於任何 變數的訪問都可以從任何位址開始訪問,但是事實上不是如此,實際上訪問特定型別的變數只能在特定的位址訪問,這就需要各個變數在空間上按一定的規則排列,而不是...