在筆試時(shí),經(jīng)常會(huì)遇到結(jié)構(gòu)體大小的問(wèn)題,實(shí)際就是在考內(nèi)存地址對(duì)齊。在實(shí)際開(kāi)發(fā)中,如果一個(gè)結(jié)構(gòu)體會(huì)在內(nèi)存中高頻地分配創(chuàng)建,那么掌握內(nèi)存地址對(duì)齊規(guī)則,通過(guò)簡(jiǎn)單地自定義對(duì)齊方式,或者調(diào)整結(jié)構(gòu)體成員的順序,可以有效地減少內(nèi)存使用。另外,一些不用邊界對(duì)齊、可以在任何地址(包括奇數(shù)地址)引用任何數(shù)據(jù)類型的的機(jī)器,不在本文討論范圍之內(nèi)。

什么是地址對(duì)齊

計(jì)算機(jī)讀取或者寫(xiě)入存儲(chǔ)器地址時(shí),一般以字(因系統(tǒng)而異,32位系統(tǒng)為4個(gè)字節(jié))大?。∟)的塊來(lái)執(zhí)行操作。數(shù)據(jù)對(duì)齊就是將數(shù)據(jù)存儲(chǔ)區(qū)的首地址對(duì)齊字大?。∟)的某個(gè)整數(shù)倍地址為了對(duì)齊數(shù)據(jù),有時(shí)需要在物理上相鄰的兩個(gè)數(shù)據(jù)之間保留或者插入一些無(wú)意義的字節(jié)。內(nèi)存對(duì)齊本事編譯器考慮是事情,但在C、C++語(yǔ)言中,可以人為修改對(duì)齊方式。

為什么要地址對(duì)齊

計(jì)算機(jī)會(huì)保證存儲(chǔ)器字的大小,至少要大于等于計(jì)算機(jī)支持的最大原始數(shù)據(jù)類型的大小。

這樣,一個(gè)原始數(shù)據(jù)類型就一定可以存放在一個(gè)存儲(chǔ)器字中,如果保證了數(shù)據(jù)是地址對(duì)齊的,那么訪問(wèn)一個(gè)原始數(shù)據(jù)就可以保證只訪問(wèn)一個(gè)存儲(chǔ)器字,這有利于提高效率。如下圖

Android培訓(xùn),安卓培訓(xùn),手機(jī)開(kāi)發(fā)培訓(xùn),移動(dòng)開(kāi)發(fā)培訓(xùn),云培訓(xùn)培訓(xùn)

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負(fù)責(zé)任的教育,學(xué)習(xí)改變命運(yùn),軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開(kāi)發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式