一、記憶體對齊的原因
2、效能原因:資料結構(尤其是棧)應該盡可能地在自然邊界上對齊。原因在於,為了訪問未對齊的記憶體,處理器需要作兩次記憶體訪問;而對齊的記憶體訪問僅需要一次訪問。
二、對齊方式
每個平台上的編譯器都有自己的預設「對齊係數」。同時,我們也可以通過預編譯命令#pragmapack(n)...#pragma pack()來改變對齊係數n,取值為1,2,4,8,16。
當結構體進行記憶體分配時,分兩步對齊:第
一、每個結構體成員所分配的儲存位置與起始點的偏移量必須能夠整除min(對齊係數,成員位元組數),這一步可以稱為成員對齊;第
二、整個結構體所佔儲存空間要能整除min(max(成員位元組數),對齊係數),這一步可以稱為結構體對齊。
三、例項解說
為了更清晰地說明這個問題,以兩個成員內容相同但成員順序不同的例子來解說:
**公式為:與起始位置偏移量%min(對齊係數,該成員所佔位元組數),它必須滿足可以整除的條件。
max(成員所佔位元組數)=8
1。對齊係數為1
2。對齊係數為2
結構體內存對齊
結構體內存對齊 一 什麼是位元組對齊,為什麼要對齊?現代計算機中記憶體空間都是按照byte劃分的,從理論上講似乎對任何型別的變數的訪問可以從任何位址開始,但實際情況是在訪問特定型別變數的時候經常在特 定的記憶體位址訪問,這就需要各種型別資料按照一定的規則在空間上排列,而不是順序的乙個接乙個的排放,這...
結構體內存對齊
一 什麼是位元組對齊,為什麼要對齊?現代計算機中記憶體空間都是按照byte劃分的,從理論上講似乎對任何型別的變數的訪問可以從任何位址開始,但實際情況是在訪問特定型別變數的時候經常在特 定的記憶體位址訪問,這就需要各種型別資料按照一定的規則在空間上排列,而不是順序的乙個接乙個的排放,這就是對齊。對齊的...
結構體內存對齊
對齊規則 每個特定平台上的編譯器都有自己的預設 對齊係數 也叫對齊模數 程式設計師可以通過預編譯命令 pragma pack n n 1,2,4,8,16來改變這一係數,其中的n就是你要指定的 對齊係數 規則 1 資料成員對齊規則 結構 struct 的資料成員,第乙個資料成員放在offset為0的...