在其中一篇文章中看到這樣一段話:
比如在32位cpu下,假設一個整型變量的地址為0x00000004,那它就是自然對齊的。
假設上面整型變量的地址不是自然對齊,比如為0x00000002,則CPU如果取它的值的話需要訪問兩次內存,第一次取從0x00000002-0x00000003的一個short,第二次取從0x00000004-0x00000005的一個short然後組合得到所要的數據,如果變量在0x00000003地址上的話則要訪問三次內存,第一次為char,第二次為short,第三次為char,然後組合得到整型數據。而如果變量在自然對齊位置上,則只要一次就可以取出數據。
問題:請問如果整型變量地址為:0x00000002,為什麼訪問內存第一次是從0x00000002-0x00000003的一個short,第二次取從0x00000004-0x00000005的一個short?
而如果整型變量在0x00000003地址上的話,則要訪問三次內存,第一次為char,第二次為short,第三次為char??
對於x86計算機,每次只能從4的倍數的地址上訪問連續的4個字節。
你訪問0x2-0x3,其實就是訪問0x0-0x3的4個字節。然後訪問0x4-0x7的4個字節(而你只需要0x2-0x3 0x4-0x5)
如果你的兩個變量分別在0x0-0x1 0x2-0x3,那麼只要訪問1次就可以了。