C語言結構體的位元組對齊

2021-07-04 21:04:25 字數 788 閱讀 7408

下面直接來看例子吧:測試環境為32位的系統

以下結構體分別佔多少位元組:

struct a ;
sizeof(a) = 3;//因為a、b、c按照1個位元組進行對齊

struct b ;
sizeof(b) = 8;

按照4個位元組對齊:

a佔4位元組

b佔乙個位元組 c佔2個位元組 有1個位元組剩餘

struct c ;

sizeof(c) = 12;

按照4個位元組對齊:

b佔4個位元組

c佔2個位元組有2個位元組空餘

#pragma pack(2)

struct d ;

sizeof(d) = 8;

pragma pack(2)設定了按照2個位元組進行對齊

a占用1個位元組 1個位元組空餘

b占用4個位元組

c占用2個位元組

#pragma pack(1)

struct e ;

sizeof(e) = 9;

pragma pack(1)設定了按照1個位元組進行對齊

a占用1個位元組

b占用4個位元組

c占用2個位元組

C語言結構體 位元組對齊

目的 犧牲一點空間,換時間的效率 cpu執行效率 最終結構體大小一定是4的倍數 32bit系統 結構體裡成員變數順序不一致,也會影響結構體的大小 資料型別 32位機大小 位元組 64位機大小 位元組 char11 short22 int4 4long48 指標型別48 double88 float4...

C語言結構體的位元組對齊

在c語言中,結構是一種復合資料型別,其構成元素既可以是基本資料型別 如int long float等 的變數,也可以是一些復合資料型別 如陣列 結構 聯合等 的資料單元。在結構中,編譯器為結構的每個成員按其自然對界 alignment 條件分配空間。各個成員按照它們被宣告的順序在記憶體中順序儲存,第...

C語言結構體位元組對齊總結

首先說說為什麼要對齊。為了提高效率,計算機從記憶體中取資料是按照乙個固定長度的。以32位機為例,它每次取32個位,也就是4個位元組。位元組對齊有什麼好處?以int型資料為例,如果它在記憶體中存放的位置按4位元組對齊,也就是說1個int的資料全部落在計算機一次取數的區間內,那麼只需要取一次就可以了。如...