成人AV在线无码|婷婷五月激情色,|伊人加勒比二三四区|国产一区激情都市|亚洲AV无码电影|日av韩av无码|天堂在线亚洲Av|无码一区二区影院|成人无码毛片AV|超碰在线看中文字幕

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

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

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

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

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

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

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

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