3.c语言结构体成员内存对齐详解


一.关键一点

最关键的一点:结构体在内存中是一个矩形,而不是一个不规则形状

 二.编程实战

 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
", &a);
16 
17     system("pause");
18 }
结构体代码

我们可以看到前四个字节是int a的 后四个字节是 char b的 虽然只用了前面一个字节 后面三位都用cc给替代了

如果在结构体中再定义一个char变量,则继续多分配的内存中的后一个字节 还是八个,(按最大的单位进行对齐)

还有就是如果改了顺序,则内存也变了

三.几个例子

这是这个结构体的内存大小为12

再举个列子:

求这个结构体大小

为十二个字节,这里有个有意思的地方,当short放到小单位里面是要以两个字节对齐,所以放在后面的两个字节中

原文地址:https://www.cnblogs.com/xiaochi/p/7992832.html