c 位址對齊

2022-03-27 05:57:08 字數 791 閱讀 3756

在一些計算機上,由於效能方面的原因,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 劃分的,從理論上講似乎對任何型別的變數的訪問可以從任何位址開始,但實際情況是在訪問特定變數的時候經常在特定的記憶體位址訪問,這就需要各型別資料按照一定的規則在空間上排列,而不是順序的乙個接乙個的排列,這就是對齊。為什麼要位址對齊?對齊的...