謹(jǐn)記兼容32位和64位環(huán)境下代碼編寫(xiě)事項(xiàng)

把long賦值給int不就會(huì)被截?cái)嗦铮灰獙?shí)際的數(shù)值可以被int所容納不就行了嘛。頂多也就是個(gè)警告而已。

為啥要使用數(shù)值的對(duì)象類(lèi)型呢?
因?yàn)樗鼘?duì)基本數(shù)值類(lèi)型做了封裝,屏蔽了環(huán)境32位和64位的差別,讓你專(zhuān)注于邏輯上的思考。

NSNotFound居然是個(gè)數(shù)字!

本節(jié)說(shuō)32位編譯器以4字節(jié)為單位對(duì)齊,64位編譯器以8字節(jié)為單位對(duì)齊。原因?yàn)?2位編譯器中的32除以8等于4,同理可知64位環(huán)境中8的由來(lái)。
32位環(huán)境以4字節(jié)為對(duì)齊單位,64位環(huán)境以8字節(jié)為對(duì)齊單位。
本節(jié)中還舉了這樣一個(gè)struct結(jié)構(gòu)體的例子。



書(shū)中說(shuō)在32位環(huán)境下由于前三個(gè)變量都各占4個(gè)字節(jié),并且符合32位環(huán)境下的對(duì)其單位,所以前三個(gè)成員總共占了12個(gè)字節(jié),最后一個(gè)變量自身大小占8個(gè)字節(jié),又是對(duì)齊單位的倍數(shù),所以沒(méi)問(wèn)題。
但是在64位環(huán)境下前兩個(gè)成員占了8個(gè)字節(jié)正好一個(gè)對(duì)齊單位,但是第三個(gè)成員自身是4個(gè)字節(jié),對(duì)齊單位是8個(gè)字節(jié),所以它占不到8個(gè)字節(jié)。這樣會(huì)導(dǎo)致第四個(gè)成員的前四個(gè)字節(jié)被填充到第三個(gè)字節(jié)空余的那個(gè)4個(gè)字節(jié)中,后四個(gè)字節(jié)在新的內(nèi)存對(duì)其單位中。CPU想訪問(wèn)第四個(gè)成員的時(shí)候需要先訪問(wèn)第三個(gè)成員所在的8個(gè)字節(jié)中的后四個(gè)字節(jié),再訪問(wèn)第四個(gè)成員所在的新的8個(gè)字節(jié)中的前4個(gè)字節(jié)。造成讀寫(xiě)效率的低下,為了避免這種情況的出現(xiàn),所以需要把第三個(gè)成員變量的所造成的空白的4個(gè)字節(jié)填充滿(mǎn)。

所以寫(xiě)結(jié)構(gòu)體的慣例是先寫(xiě)占用內(nèi)存大的類(lèi)型,然后寫(xiě)占用內(nèi)存小的類(lèi)型。你也可以不遵守這個(gè)慣例而使用強(qiáng)制對(duì)齊。

所謂緊湊型的數(shù)據(jù)結(jié)構(gòu),是從內(nèi)存的排布角度來(lái)說(shuō)的,就是無(wú)論是32位環(huán)境下還是64位環(huán)境下所占用的實(shí)際內(nèi)存盡量的小,為什么呢,因?yàn)橛袀€(gè)填充的機(jī)制。如果數(shù)據(jù)設(shè)計(jì)得不好填充所需要的空間會(huì)很大。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容