卖逼视频免费看片|狼人就干网中文字慕|成人av影院导航|人妻少妇精品无码专区二区妖婧|亚洲丝袜视频玖玖|一区二区免费中文|日本高清无码一区|国产91无码小说|国产黄片子视频91sese日韩|免费高清无码成人网站入口

c語言結(jié)構(gòu)體對齊規(guī)則 內(nèi)存對齊的目的和規(guī)則?

內(nèi)存對齊的目的和規(guī)則?內(nèi)存對齊原則有四個:1).數(shù)據(jù)成員對齊規(guī)則:結(jié)構(gòu)(struct)(或聯(lián)合(union))的數(shù)據(jù)成員,第一個數(shù)據(jù)成員放在offset為0的地方,以后每個數(shù)據(jù)成員存儲的起始位置要從該

內(nèi)存對齊的目的和規(guī)則?

內(nèi)存對齊原則有四個:

1).數(shù)據(jù)成員對齊規(guī)則:結(jié)構(gòu)(struct)(或聯(lián)合(union))的數(shù)據(jù)成員,第一個數(shù)據(jù)成員放在offset為0的地方,以后每個數(shù)據(jù)成員存儲的起始位置要從該成員大小或者成員的子成員大小(只要該成員有子成員,比如說是數(shù)組,結(jié)構(gòu)體等)的整數(shù)倍開始(比如int在32位機(jī)為4字節(jié), 則要從4的整數(shù)倍地址開始存儲),基本類型不包括struct/class/uinon。

2).結(jié)構(gòu)體作為成員:如果一個結(jié)構(gòu)里有某些結(jié)構(gòu)體成員,則結(jié)構(gòu)體成員要從其內(nèi)部"最寬基本類型成員"的整數(shù)倍地址開始存儲.(struct a里存有struct b,b里有char,int ,double等元素,那b應(yīng)該從8的整數(shù)倍開始存儲.)。


3).收尾工作:結(jié)構(gòu)體的總大小,也就是sizeof的結(jié)果,.必須是其內(nèi)部最大成員的"最寬基本類型成員"的整數(shù)倍.不足的要補(bǔ)齊.(基本類型不包括struct/class/uinon)。


4).sizeof(union),以結(jié)構(gòu)里面size最大元素為union的size,因?yàn)樵谀骋粫r刻,union只有一個成員真正存儲于該地址。

如何理解struct的內(nèi)存對齊?

C中的結(jié)構(gòu)體對齊問題 結(jié)構(gòu)體所占的位數(shù)要是結(jié)構(gòu)體成員中所占位數(shù)最長的那個數(shù)據(jù)的整數(shù)倍,在這個結(jié)構(gòu)體中 結(jié)構(gòu)體所占的位數(shù)是double型的整數(shù)倍。這個結(jié)構(gòu)體雖然使用了位域,但是對結(jié)果沒有影響。int i 占4個字節(jié),char j占一個字節(jié),這倆總共要占8個字節(jié),雖然后面的3個字節(jié)沒有用。int a 本身占個4個字節(jié),但與結(jié)構(gòu)體對齊,要占8個字節(jié)。double b占8個字節(jié)??偣矠? 8 8=24個字節(jié)

內(nèi)存對齊的規(guī)則?

為了加快計(jì)算機(jī)的取數(shù)速度,編譯器默認(rèn)對內(nèi)存進(jìn)行字節(jié)對齊。對結(jié)構(gòu)體(包括類)進(jìn)行字節(jié)對齊的原則是:

1)結(jié)構(gòu)體變量的首地址能夠被其最寬基本類型成員的大小所整除;

2)結(jié)構(gòu)體每個成員相對于結(jié)構(gòu)體首地址的偏移量(offset)都是成員大小的整數(shù)倍,如有需要編譯器會在成員之間加上填充字節(jié)(internaladding);

3)結(jié)構(gòu)體的總大小為結(jié)構(gòu)體最寬基本類型成員大小的整數(shù)倍,如有需要編譯器會在最末一個成員之后加上填充字節(jié)(trailingpadding)。structSByte1{doubled//偏移量0~7charj//偏移量8inta//偏移量12~15,由于9不能整除4,故先填充9~11}sizeof(SByte1)//=16structSByte2{charj//偏移量0doubled//偏移量8~15,由于1不能整除8,故先填充1~7inta//偏移量16~19}sizeof(SByte2)//=24,為了湊成8的倍數(shù),填充20~23

c語言中變量存儲為什么要內(nèi)存對齊?

為了有助于加快計(jì)算機(jī)的取數(shù)速度,編譯器默認(rèn)會對結(jié)構(gòu)體進(jìn)行處理(實(shí)際上其它地方的數(shù)據(jù)變量也是如此),讓寬度為2的基本數(shù)據(jù)類型(short等)都位于能被2整除的地址上,讓寬度為4的基數(shù)據(jù)類型(int等)都位于能被4整除的地址上,以此類推。這樣,兩個數(shù)中間就可能需要加入填充字節(jié),所以整個結(jié)構(gòu)體的sizeof值就增長了。

字節(jié)對齊的細(xì)節(jié)和編譯器實(shí)現(xiàn)相關(guān),但一般而言,滿足三個準(zhǔn)則:

1) 結(jié)構(gòu)體變量的首地址能夠被其最寬基本類型成員的大小所整除;

2) 結(jié)構(gòu)體每個成員相對于結(jié)構(gòu)體首地址的偏移量(offset)都是成員大小的整數(shù)倍,如有需要編譯器會在成員之間加上填充字節(jié)(internal adding);

3) 結(jié)構(gòu)體的總大小為結(jié)構(gòu)體最寬基本類型成員大小的整數(shù)倍,如有需要編譯器會在最末一個成員之后加上填充字節(jié)(trailing padding)。