**
概括:一. 基本原則
1. struct中成員變數的宣告順序,與成員變數對應的記憶體順序是一致的;
2. struct本身的起始儲存位址必須是成員變數中最長的資料型別的整倍數,注意是最長的資料型別,而不是最長的變數(對於陣列只看型別不看元素個數)
3. 記憶體對齊與編譯器設定有關。
二. 計算規則(以下的所有規則,必須同時滿足,並不是滿足其中一條即可)
1. 每個成員變數相對於struct起始位址的偏移量,必須是成員變數自身型別長度的最小整倍數
2. 結構體記憶體大小,必須是成員變數中型別長度最長者的整倍數,如果不是,則在最後乙個成員變數後補齊
3. 成員變數是陣列時,按照型別長度對齊,而不是陣列長度對齊(如int a[10]的型別長度為int型,即為4)
4. 成員變數是結構體時,根據struct基本原則,其儲存偏移量必須是成員變數中最長的資料型別的整倍數(當進行規則2的判斷時,結構體變數也是使用成員變數中最長型別,結合上邊幾條規則,這個其實很好理解的)
結構體記憶體大小對齊原則 位域
結構體中成員變數分配的空間是按照成員變數中占用空間最大的來作為分配單位,同樣成員變數的儲存空間也是不能跨分配單位的,如果當前的空間不足,則會儲存到下乙個分配單位中。補充 結構體變數的首位址能夠被其最寬基本型別成員的大小所整除。結構體每個成員相對於結構體首位址的偏移量 offset 都是成員大小的整數...
struct 結構體內存對齊方式
以下都以32位機器為例分析結構體型別的變數在記憶體裡的儲存 一 1.結構體變數的儲存位置都是在記憶體中尋找位址是該變數自身大小整數倍開始儲存的。2.結構體型別變數的總大小應是該型別成員中最大資料型別的整數倍。就此兩點,可以解決所有問題,對於第一條,應該注意每一位成員存放的首位址定為自身的整數倍。例子...
關於struct占用記憶體大小的幾點分析
struct占用記憶體空間分析 在初學c語言的時候,很多人都認為struct結構體占用記憶體空間的大小等於所有結構體成員各自所佔記憶體空間的總和,其實這種觀點是存在誤區的。舉乙個簡單的例子 include struct test int main void 程式執行的結果為4 注 我使用gcc進行編...