記憶體對齊規則

2022-04-05 14:32:58 字數 356 閱讀 8423

隔了很久,搞忘了對齊的規則,現在重新複習了下,記下來謹防以後又忘記。

1、可以根據 #pragma pack() 設定對齊係數,且叫為n

2、結構體中,對比每個成員變數自身的大小和n的大小。 取小的個為標準,把這個小的叫a吧,稱為按a對齊

3、每個變變數的起始位址需要為a的整數倍,不是整數倍的則補齊。

4、最後這個結構體也要對齊,它佔的大小是最大的乙個變數 型別的 大小的整數倍,不是的補齊。加起來則是所佔大小。

5、uion中是算不對齊時,佔最大記憶體的乙個變數為記憶體總值(因為會有陣列型別)為最大值, 但也需要對齊,佔的總大小是最大的乙個變數 型別的 大小的整數倍。所以不滿足整數倍的補齊。

這裡有很多相關例子

記憶體對齊規則

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

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

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

struct 記憶體對齊規則

1 確定資料成員的offset位址 a 基本資料型別 不包括陣列 struct class uinon 起始offset位址,規律如下,sizeof atom type n n 0,1,2,3.例子 char 0,1,2,3.int 0,4,8,12.double 0,8,16,24.b 組合資料成...