rust裡的記憶體對齊

2022-06-06 05:33:12 字數 787 閱讀 1699

記憶體對齊主要遵循下面三個原則:

結構體變數的起始位址能夠被其最寬的成員大小整除

結構體每個成員相對於起始位址的偏移能夠被其自身大小整除,如果不能則在前乙個成員後面補充位元組

結構體總體大小能夠被最寬的成員的大小整除,如不能則在後面補充字

上**struct a 

fn main() ;

println!("", std::mem::size_of::());

println!("", &a);

println!("", &a.a);

println!("", &a.b);

println!("", &a.c);

println!("", &a.d);

println!("", &a.e);

}按一般理解,a的記憶體圖應該是ax

xxbb

bbcc

dexx

總位元組數應該是14

但是輸出為

120x18e94ff788

0x18e94ff78e

0x18e94ff788

0x18e94ff78c

0x18e94ff78f

0x18e94ff790

可以發現rust編譯器將a,b,c,d,e的位置調換了

記憶體圖如下bb

bbcc

adex

xx

記憶體對齊 記憶體對齊規則解釋 記憶體對齊原理

一 記憶體對齊的原因 我們都知道計算機是以位元組 byte 為單位劃分的,理論上來說cpu是可以訪問任一編號的位元組資料的,我們又知道cpu的定址其實是通過位址匯流排來訪問記憶體的,cpu又分為32位和64位,在32位的cpu一次可以處理4個位元組 byte 的資料,那麼cpu實際定址的步長就是4個...

記憶體對齊(自然對齊)

參考 今天與超,暉,棟,宇幾人論此問題,終得以下結論,不知正確與否,姑且記下。對於32位機,cpu的記憶體讀寫週期是4word,所以在記憶體對齊時,皆以此填滿。如 struct a char a double b char c sizeof a 4 8 4 16 struct b char a do...

位元組對齊 記憶體對齊 對齊粒度

其實標題裡面的三個關鍵字說的都是同乙個東西。也就是c 中類和結構體在記憶體中的分配策略,專業術語可以稱之為 對齊模數 alignment modules 對齊模數分為三類 1.自身對齊模數,也就是類或結構體中成員的大小,1,2,4,8之中的乙個,對應byte word dword qword。2.指...