日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 單片機(jī) > CPP開發(fā)者
[導(dǎo)讀]?什么是內(nèi)存對(duì)齊?理論上計(jì)算機(jī)對(duì)于任何變量的訪問都可以從任意位置開始,然而實(shí)際上系統(tǒng)會(huì)對(duì)這些變量的存放地址有限制,通常將變量首地址設(shè)為某個(gè)數(shù)N的倍數(shù),這就是內(nèi)存對(duì)齊。為什么要內(nèi)存對(duì)齊?1.硬件平臺(tái)限制,內(nèi)存以字節(jié)為單位,不同硬件平臺(tái)不一定支持任何內(nèi)存地址的存取,一般可能以雙字節(jié)、...

?什么是內(nèi)存對(duì)齊?

理論上計(jì)算機(jī)對(duì)于任何變量的訪問都可以從任意位置開始,然而實(shí)際上系統(tǒng)會(huì)對(duì)這些變量的存放地址有限制,通常將變量首地址設(shè)為某個(gè)數(shù)N的倍數(shù),這就是內(nèi)存對(duì)齊。

為什么要內(nèi)存對(duì)齊?

1. 硬件平臺(tái)限制,內(nèi)存以字節(jié)為單位,不同硬件平臺(tái)不一定支持任何內(nèi)存地址的存取,一般可能以雙字節(jié)、4字節(jié)等為單位存取內(nèi)存,為了保證處理器正確存取數(shù)據(jù),需要進(jìn)行內(nèi)存對(duì)齊。

  1. 提高CPU內(nèi)存訪問速度,一般處理器的內(nèi)存存取粒度都是N的整數(shù)倍,假如訪問N大小的數(shù)據(jù),沒有進(jìn)行內(nèi)存對(duì)齊,有可能就需要兩次訪問才可以讀取出數(shù)據(jù),而進(jìn)行內(nèi)存對(duì)齊可以一次性把數(shù)據(jù)全部讀取出來,提高效率。

內(nèi)存對(duì)齊規(guī)則

1. 數(shù)據(jù)成員對(duì)齊規(guī)則:struct或者union的數(shù)據(jù)成員,第一個(gè)數(shù)據(jù)成員放在offset為0的地方,以后每個(gè)數(shù)據(jù)成員都按照#pragma pack數(shù)值和這個(gè)數(shù)據(jù)成員自身大小中更小的那個(gè)進(jìn)行對(duì)齊。

2. 整體對(duì)齊規(guī)則:struct或者union的首地址按照內(nèi)部最大數(shù)據(jù)成員的大小和#pragma pack數(shù)值較小的那個(gè)N進(jìn)行對(duì)齊,并且結(jié)構(gòu)體的總大小為N的整數(shù)倍,如有必要編譯器也會(huì)在最后一個(gè)成員后面填充一些字節(jié)用于對(duì)齊。

如何進(jìn)行內(nèi)存對(duì)齊

class?A
{
用于創(chuàng)建一塊對(duì)齊的內(nèi)存
????int?a;
????char?d;
};

//?創(chuàng)建給定類型對(duì)象大小滿足對(duì)齊要求的未初始化內(nèi)存塊,在一個(gè)內(nèi)存對(duì)齊的緩沖區(qū)上創(chuàng)建對(duì)象
//?C 11后可以這樣操作
void?align_cpp11_after()
{
????static?std::aligned_storage<sizeof(A),
????????????????????????????????alignof(A)>::type?data;
????A?*attr?=?new?(
本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關(guān)閉