C語言結構體內存對齊問題

2021-07-24 04:10:52 字數 544 閱讀 6181

1.64位系統,long double在struct結構體中對齊值是8,int float對齊值是4,char對齊值是1,short對齊值2

sizeof(long) = sizeof(double) = 8

2.32位系統,long在struct結構體中對齊值是4, double在struct結構體中對齊值是4,int float對齊值是4,char對齊值是1,short對齊值是2

sizeof(long) = 4

sizeof(double) = 8

結構體內存對齊

1.只按char,short,int,float,double,指標等「原子型別對齊」,結構體巢狀時,需要將子結構體展開成原子型別

2、char對齊值為1,short對齊值為2,int,float,double,指標的對齊值為 4,具體參照上面

3、每個成員變數存放的起始位置相對於結構體起始位置的偏移量,必須是該成員對齊值與系統對齊值這兩者較小值的整數倍

4、整個結構體的大小,必須是結構體對齊值的整數倍。結構體對齊值為系統對齊值與結構體成員中的最大對齊值這兩者的較小值

C語言結構體內存對齊

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

C語言結構體內存對齊

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

C語言 結構體內存對齊

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