国产成人毛片视频|星空传媒久草视频|欧美激情草久视频|久久久久女女|久操超碰在线播放|亚洲强奸一区二区|五月天丁香社区在线|色婷婷成人丁香网|午夜欧美6666|纯肉无码91视频

win10分配字節(jié)內(nèi)存失敗 C中malloc分配內(nèi)存中有沒有字節(jié)對齊一說?

C中malloc分配內(nèi)存中有沒有字節(jié)對齊一說?C本身并不對齊malloc,但編譯器通常會對其進(jìn)行優(yōu)化,即malloc獲得的數(shù)據(jù)是4字節(jié)或8字節(jié)對齊的。這是在操作系統(tǒng)分配內(nèi)存時完成的。怎么做8字節(jié)內(nèi)存對

C中malloc分配內(nèi)存中有沒有字節(jié)對齊一說?

C本身并不對齊malloc,但編譯器通常會對其進(jìn)行優(yōu)化,即malloc獲得的數(shù)據(jù)是4字節(jié)或8字節(jié)對齊的。這是在操作系統(tǒng)分配內(nèi)存時完成的。

怎么做8字節(jié)內(nèi)存對齊?

VC和GCC默認(rèn)都是4字節(jié)對齊方式,#pragma pack(n)可用于在編程中指定對齊模數(shù)。造成上述差異的原因是VC和GCC對double類型的對齊方式不同。Win32平臺上的microsoftvc編譯器默認(rèn)采用以下對齊規(guī)則:任何基本數(shù)據(jù)類型T的對齊模數(shù)為T的大小,即sizeof(T)。例如,對于double類型(8字節(jié)),這種類型的數(shù)據(jù)的地址總是8的倍數(shù),而char類型的數(shù)據(jù)(1字節(jié))可以從任何地址開始。Linux下的GCC遵循另一套規(guī)則:2字節(jié)大?。ò▎巫止?jié))的任何數(shù)據(jù)類型的對齊模數(shù)是2,而所有其他超過2字節(jié)大小的數(shù)據(jù)類型(如long、double)都是4。復(fù)雜類型(如結(jié)構(gòu))的默認(rèn)對齊方式是其最長成員的對齊方式,當(dāng)成員是復(fù)雜類型時,該對齊方式會使長度最小化。Struct{char a;double B;}在VC中,由于結(jié)構(gòu)中有double和char,根據(jù)最長的數(shù)據(jù)類型對齊方式,char只占用1b,但后面的double占用的空間超過8b,char獨(dú)占8b;而double占用8b,共16byte。在GCC中,double的長度超過4個字節(jié),并按4個字節(jié)對齊。原理同上,但char取4字節(jié),double取2個4字節(jié),共12字節(jié)。

字節(jié)對齊會影響內(nèi)存訪問的效率嗎?

主要原因是CPU執(zhí)行內(nèi)存訪問指令時,如果地址對齊,可以縮短內(nèi)存訪問的時鐘周期,從而提高內(nèi)存訪問速度。詳細(xì)資料可參見《微機(jī)原理》等書籍,會有相關(guān)介紹