内存对齐
看了好多次,感覺這一次才算是真正理解了
#pragma pack(4)//可手動指定對齊值
?
typedef struct DDD
{
???????? char a;//1 起始位置可為1,2,3,4,5…….??? 這個放在位置1
???????? short b;//2起始位置可為1,2,4,6,8…..?????? ? 這個需要放在位置2,故之前補1
???????? int c;//4 起始位置可為1,4,8,16…….???????????? ? 這個需要放在位置4,剛好是4
???????? double d;//8 起始位置可為1,8,16,24,32…..這個需要放在位置8,剛好是8
???????? char e;//1 這個需要放在位置9,剛好是9
}AAA;//在最后,需要對整個結(jié)構(gòu)體對齊,對齊方式是min(系統(tǒng)默認(rèn)對齊值,max(char,int ,double) )
?
#pragma pack(4) //用于指定在最后對齊的方式,和結(jié)構(gòu)體中變量最大的長度相比取最小值進行外部對齊
1、? 首先按照結(jié)構(gòu)體內(nèi)部數(shù)據(jù)成員進行對齊
2、? 其次在內(nèi)部對齊后在對整個結(jié)構(gòu)體進行對齊
下面具體來說,內(nèi)部對齊時,每一個成員都按照自身大小的整數(shù)倍進行對齊,比如說int類型,必須放在起始位置為1、4、8、16….等位置。
在內(nèi)部對齊完成后,要對整個結(jié)構(gòu)體進行對齊,這是的對齊方式就是min(系統(tǒng)默認(rèn)對齊值,max(char,int ,double) )
?說明:這里說從1開始,實際上內(nèi)存里地址是從0開始的,但是不影響理解
轉(zhuǎn)載于:https://www.cnblogs.com/songliquan/p/4346931.html
總結(jié)
- 上一篇: 一年挣多少钱啊?
- 下一篇: 1m网速是什么意思,1m带宽是什么意思