在一些計算機上,由於效能方面的原因,2個位元組的變數,必須放在2的倍數的位址中,4個位元組的,就必須放在4的倍數中的位址中,以此類推。
也就是說,如果有3個占用兩個位元組的變數,分別為:a,b,c,如下圖:
&0 &1 &2 &3 &4 &5 &6 &7 &8 &9 &10 &11 &12
a a b b c c
這時,&0-&5的位址會被占用,每個位址為乙個位元組,因為a、b、c三個變數都是兩位元組,他們正好放在2的倍數的位址中,現在剛剛好。
如果這時,又要加入乙個4個位元組的變數d,
4位元組的話,就要找4的倍數的記憶體位址,&4或者&8,
然而&4已經被cc占用了,所以只能使用&8開始來存放這個變數,既:
&0 &1 &2 &3 &4 &5 &6 &7 &8 &9 &10 &11 &12
a a b b c c d d d d
可以看到,&0、&2、&4都是2的倍數,
所以這三個位址可以順利存放aa、bb、cc,
因為他們都是2位元組,但是dddd就需要放在&8
而中間就會空出兩個位元組 ,這時整個函式或者類,
就會因為位址對齊的原因多出兩個位元組,本來應該只占用2+2+2+4=10個位元組,
現在就需要2+2+2+2+4=12個位元組,這就是所謂的位址對齊。
最近剛開始學c++,這是我的理解,不對的地方,還請各位大神指教。
C 位元組對齊(記憶體位址對齊)
現代計算機中記憶體空間都是按照byte劃分的,從理論上講似乎對任何型別的變數的訪問可以從任何位址開始,但實際情況是在訪問特定型別變數的時候經常在特 定的記憶體位址訪問,這就需要各種型別資料按照一定的規則在空間上排列,而不是順序的乙個接乙個的排放,這就是對齊。對齊的作用和原因 各個硬體平台對儲存空間的...
Cache位址對齊
cache是高速緩衝儲存器,如果將cache想象成一棟樓房,那麼每個儲存塊就相當於乙個房間,而位址就是每個房間的門牌號,可以通過位址對對應的儲存塊進行讀寫操作。axi是一種介面協議,規定位址是位元組對齊的。位元組對齊的意思是 每個位址代表的儲存塊位寬為1個位元組 byte 這裡設1byte 8bit...
C語言記憶體位址對齊詳解
什麼是位址對齊?現代計算機中記憶體空間都是按照位元組 byte 劃分的,從理論上講似乎對任何型別的變數的訪問可以從任何位址開始,但實際情況是在訪問特定變數的時候經常在特定的記憶體位址訪問,這就需要各型別資料按照一定的規則在空間上排列,而不是順序的乙個接乙個的排列,這就是對齊。為什麼要位址對齊?對齊的...