1. 程式人生 > >編程中為什麽需要內存對齊?

編程中為什麽需要內存對齊?

int 部分 最好 每次 命令 讀取 單位 一次 時鐘周期

  我們知道計算機中內存是以字節為單位劃分的,CPU通過地址總線來訪問內存,CPU一個時鐘周期內能處理多少字節的數據,就命令地址總線讀取幾個字節的數據。舉個例子:32位的CPU,一次能處理32bit的數據,也就是4字節的數據,那麽CPU就命令地址總線一次性讀取4字節的數據,即每次的步長都為4字節,只對地址是4的整倍數的地址進行尋址,比如:0,4,8,100等進行尋址。對於程序來說,一個變量的地址最好剛在一個尋址步長內,這樣一次尋址就可以讀取到該變量的值,如果變量跨步長存儲,就需要尋址兩次甚至多次然後再進行拼接才能獲取到變量的值,效率明顯就低了,所以編譯器會進行內存對齊,以保證尋址效率。

  32位CPU為例,尋址步長為4,程序中如果一個int變量的地址為8,那麽一次尋址就可以拿到該變量的值,如果int變量的地址為10,那麽需要先尋址地址為8的地址拿到數據的一部分,再尋址12的地址拿到另一部分,然後再進行拼接。

編程中為什麽需要內存對齊?