1. 程式人生 > >3.c語音結構體成員內存對齊詳解

3.c語音結構體成員內存對齊詳解

定義 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語音結構體成員內存對齊詳解