全攻略有點(diǎn)大放厥詞,嘩眾取寵了,其實(shí)是一些常見的問題罷了。但是自認(rèn)為總結(jié)的還算全面一點(diǎn)吧,請大家多多賜教,我只是個(gè)初學(xué)者。
接下來主要討論四點(diǎn):一、不涉及位域的內(nèi)存對齊二、涉及位域的內(nèi)存對齊三、成員變量含有結(jié)構(gòu)體的內(nèi)存對齊情況四、要求內(nèi)存對齊的原因及優(yōu)點(diǎn)
-----------------------------------------------------------------------------------
接著上一篇往下寫~~
二、涉及位域的內(nèi)存對齊注:由于能力有限,在此僅討論在VC++6.0編譯環(huán)境下的情況,對于其他編譯環(huán)境下的情況,由于沒有硬件支持,只能作罷,但會(huì)將查到的相關(guān)知識(shí)貼在最后,但不做討論。涉及位域的內(nèi)存對齊原則 如下,后用代碼分析驗(yàn)證:1) 若相鄰成員變量類型相同,且其位寬之和不大于成員變量類型位寬(在次嚴(yán)重強(qiáng)調(diào),是 類型位寬 而不是成員變量sizeof,也不是類型的sizeof或者其他什么)大小,則后面的字段將緊鄰前一個(gè)字段存儲(chǔ),直到不能容納為止; 2) 如果相鄰位域字段的類型相同,但其位寬之和不大于類型的sizeof大小,則后面的字段將從新的存儲(chǔ)單元開始,其偏移量為其類型大小的整數(shù)倍; 3) 如果相鄰的位域字段的類型不同,不同位域字段存放在不同的位域類型字節(jié)中;(這一條其實(shí)會(huì)根據(jù)編譯器的不同而采用不同的規(guī)則,此處以VC++6.0標(biāo)準(zhǔn)來說明)4)其實(shí)不存在4),這一條是說,在此,還要遵守不涉及位域的2),3)條規(guī)則,已經(jīng)部分遵守不涉及位域的第一條規(guī)則實(shí)例分析,代碼如下: