C語言結構體內存對齊

2021-09-01 00:22:53 字數 385 閱讀 7364

記憶體中存放資料的時候要有一定的規則,這麼做得根本原因是要減少cpu訪問記憶體的次數。舉個例子,int型別為4個位元組,存放int型別的記憶體的起始位址就是4的倍數,這樣cpu訪問一次記憶體就能夠取到資料(跟cpu訪問記憶體的機制有關,加上cache的對映,一般cpu一次訪問64位元組的資料,也有128位元組的)。假設cpu一次訪問64位元組,那麼只有這個int資料起始位址是4的倍數,那麼cpu總能一次把它讀取成功。假設是2位元組對齊,這個資料就有可能儲存在第一塊的63、64位元組和第一塊的1、2位元組,這樣cpu要訪問兩次記憶體才能獲取乙個int型別的資料。這就是記憶體對齊的意義。

char :乙個位元組不用對齊;

short : 兩個位元組,2 的倍數

int :4 位元組, 4的倍數

double :8位元組, 8的倍數

C語言結構體內存對齊

1.效能原因 為了提高cup的效率訪問記憶體的速度,若是訪問未對齊的記憶體,處理器需要作兩次訪問 而訪問對齊的記憶體,則只需要一次訪問。2.編譯器相關 有的編譯器已經優化了記憶體對齊,所以記憶體對齊依賴於編譯器。參考 結構體對齊問題 說實話,規則看起來不太好理解,直接模仿下面步驟即可 以32位機器為...

C語言 結構體內存對齊

1 平台原因 不是所有硬體平台都能夠訪問任意位址上的任意資料的,某些硬體平台只能在某些位址處取某些特定型別的資料,否則丟擲硬體異常。2 效能原因 主要原因 資料結構 尤其是棧 應該盡可能地在自然邊界上對齊。原因在於,為了訪問未對齊的記憶體,處理器需要作兩次記憶體訪問 而對齊的記憶體訪問僅需要一次訪問...

C語言結構體內存對齊

問題 求32bit環境下以下結構體所佔的位元組數 在32bit環境中,該結構體所佔的位元組數為16。先記住關於結構體內存對齊的三條原則 1 結構體變數的起始位址能夠被其最寬的成員大小整除。2 結構體每個成員相對於起始位址的偏移能夠被其自身大小整除,如果不能則在前乙個成員後面補充位元組。3 結構體總體...