程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> cpu-c語言中字節對齊求解??

cpu-c語言中字節對齊求解??

編輯:編程綜合問答
c語言中字節對齊求解??

在其中一篇文章中看到這樣一段話:
比如在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次就可以了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved