內存對齊

首先由一個程序引入話題

 

爲什麼會出現那樣的情況呢,
首先,先引入內存對齊的定義:
#pragma pack(n)
1. 對於結構體的各個成員,第一個成員在內存中的偏移位置爲零,也就是說,從他開始存放數據。以後每一個成員的偏移量必須是min(#pragma pack(n)中指定的數,此數據自身長度) 的倍數。舉個例子,第一個結構體中,char 型數據偏移量爲0,第二個數據爲int 型,佔4個字節,在LINUX下默認#pragma pack(n)  中N爲8 ,所以第二個數據成員的偏移量必須是8,4中較小的數的倍數,即4的倍數,所以就是4了。
2.在數據稱原完成對齊後結構體也要完成對齊,對齊將按照 min (#pragma pack(n)中指定的數,結構體中數據長度最大的那個數據)對齊,最後的內存佔用空間,應該是那個要對齊的倍數。
在第一個結構體旁邊有筆者的分析,希望大家多多指點。
發佈了24 篇原創文章 · 獲贊 7 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章