C語言之結構體內存對齊

2021-09-30 16:34:15 字數 410 閱讀 6791

結構體的記憶體對齊 --------

首先得掌握結構體對齊規則: 1:第乙個成員在結構體變數偏移量為0的位址處。 2:其他成員變數要對齊到某個數字(對齊數)的整數倍的位址處。 對齊數=編譯器預設的乙個對齊數與該成員大小的較小值。 vs中預設的值為8 linux中的預設值為4 3:結構體總大小為最大對齊數的整數倍。 4:如果巢狀了結構體的情況,巢狀的結構體對齊到自己的最大對齊數的整數倍處

。那麼為什麼存在記憶體對齊

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

C語言結構體內存對齊

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

C語言結構體內存對齊

記憶體中存放資料的時候要有一定的規則,這麼做得根本原因是要減少cpu訪問記憶體的次數。舉個例子,int型別為4個位元組,存放int型別的記憶體的起始位址就是4的倍數,這樣cpu訪問一次記憶體就能夠取到資料 跟cpu訪問記憶體的機制有關,加上cache的對映,一般cpu一次訪問64位元組的資料,也有1...

C語言 結構體內存對齊

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