unix linux 位元組對齊補齊

2021-07-10 03:33:22 字數 835 閱讀 6881

/*

* aligned.c

* * created on: 2016-2-24

* author: xfhu

*/#include

/* * 設定屬性packed,使1位元組對齊補齊,因此sizeof(c)=10,沒有未使用的記憶體空餘

*/typedef

struct a__attribute__((packed)) a;

/* * 該作業系統預設使用4位元組對齊方式,總共為sizeof(b)=16位元組因此記憶體使用為:

* 第1位元組 :存放a

* 第2~4位元組 :因為位元組對其,未使用

* 第5~12位元組 :存放b

* 第13位元組 :存放c

* 第14~16位元組 :因為位元組對其,未使用

*/typedef

struct bb;

/* * 預處理指令,使1位元組對齊補齊,因此sizeof(c)=10,沒有未使用的記憶體空餘

*/#pragma pack(1)

typedef

struct cc;

/* * 恢復預設對齊補齊方式

*/#pragma pack()

typedef

struct dd;

/* * 設定內部位元組對齊補齊,即如果e 不足32位元組,則因為對齊補齊,會分配32位元組,以至於e是32位元組對齊補齊。

*/typedef

struct e__attribute__((aligned(32))) e;

int main(int argc,char** argv)

C C 對齊補齊

c c 對齊補齊規則 1 資料成員對齊規則 結構 struct 或聯合 union 的資料成員,第乙個資料成員放在offset為0的地方,以後每個資料成員的對齊按照 pragma pack指定的數值和這個資料成員自身長度中,比較小的那個進行。2 結構 或聯合 的整體對齊規則 在資料成員完成各自對齊之...

記憶體對齊與補齊

首先我們先看看下面的c語言的結構體 相信學過彙編的朋友都很熟悉這張圖,這張圖就是cpu與記憶體如何進行資料交換的模型,其中,左邊藍色的方框是cpu,右邊綠色的方框是記憶體,記憶體上面的0 3是記憶體位址。這裡我們這張圖是以32位cpu作為代表,我們都知道,32位cpu是以雙字 dword 為單位進行...

記憶體對齊和記憶體補齊

記憶體對齊 第乙個資料成員放在offset為0的地方,對齊按照對齊係數和自身所占用的位元組數中,兩者比較小的那個進行對齊。記憶體補齊在struct或者union資料成員完成各自對齊之後,struct或者union本身也要對齊,對齊按照對齊係數和struct或者union中最大資料成員長度中比較小的那...