3.c語音結構體成員內存對齊詳解
阿新 • • 發佈:2017-12-06
定義 pre 形狀 sed 兩個 分配 我們 替代 images
一.關鍵一點
最關鍵的一點:結構體在內存中是一個矩形,而不是一個不規則形狀
二.編程實戰
1 #include <stdlib.h> 2 #include <stdio.h> 3 4 struct A 5 { 6 int a; 7 char b; 8 }; 9 10 int main() 11 { 12 struct A a; 13 a.a = 1; 14 a.b = 1; 15 printf("%p\n", &a); 16 17 system("結構體代碼pause"); 18 }
我們可以看到前四個字節是int a的 後四個字節是 char b的 雖然只用了前面一個字節 後面三位都用cc給替代了
如果在結構體中再定義一個char變量,則繼續多分配的內存中的後一個字節 還是八個,(按最大的單位進行對齊)
還有就是如果改了順序,則內存也變了
三.幾個例子
這是這個結構體的內存大小為12
再舉個列子:
求這個結構體大小
為十二個字節,這裏有個有意思的地方,當short放到小單位裏面是要以兩個字節對齊,所以放在後面的兩個字節中
3.c語音結構體成員內存對齊詳解