關於c++中的struct記憶體對齊,應該也是初學者比較疑惑的乙個知識點,但是搞清楚之後會發現非常簡單,這裡解釋一下struct記憶體到底怎麼對齊。
主要記住以下兩點: 1.
各成員變數存放的起始位址相對於結構的起始位址的偏移量必須為該變數的型別所占用的位元組數的倍數
2.整個struct的記憶體大小需為struct中最大位元組數變數的整數倍
下面舉個例子:
struct a
int型的a佔4位元組,char型的b佔1位元組,根據要點1,b的偏移量就是a的大小4位元組,是b大小1位元組的整數倍,因此已經對齊,再看short c的大小是2位元組,相對於結構體起始記憶體偏移量是(4+1)=5位元組,不是2的整數倍,因此這裡需要插入1位元組,成6位元組,這樣才是2位元組的整數倍,最後看d,偏移量為8,已經是整數倍,現在總記憶體是12位元組,是struct中最大位元組變數的整數倍,不需要對齊,因此總的大小為12位元組。
struct記憶體對齊
出於速度和空間的考量,編譯器在實現過程中均會採用對struct內的變數進行記憶體對齊的操作,雖然會有一定的空間浪費,卻可以減少在讀取資料時候的讀取操作。先看下面的例子 struct a int main struct b int main struct b int main struct a str...
struct 記憶體對齊
struct 是一種復合資料型別,其構成元素既可以是基本資料型別 如 int long float 等 的變數,也可以是 一些復合資料型別 如 array struct union 等 的資料單元。對於結構體,編譯器會自動進行成員變數的對齊,以提高運算效率。預設情況下,編譯器為結構體的每個成員按其自...
struct記憶體對齊 詳解
結構體的對齊 在sizeof計算乙個結構體的大小時,經常得到的值比結構體內部成員所佔記憶體總和要大,這就是因為在結構體內部,成員在儲存時有對齊的規則。結構體對齊指的是 編譯器向結構體插入無用記憶體的能力,插入無用記憶體使得結構體成員以最佳方式對齊,從而得到更高的效能。當基本資料型別以位元組位址 幾倍...