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

时间:2023-03-08 16:19:55
3.c语言结构体成员内存对齐详解

一.关键一点

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

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

二.编程实战

 #include <stdlib.h>
#include <stdio.h> struct A
{
int a;
char b;
}; int main()
{
struct A a;
a.a = ;
a.b = ;
printf("%p\n", &a); system("pause");
}

结构体代码

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

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

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

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

三.几个例子

3.c语言结构体成员内存对齐详解这是这个结构体的内存大小为12

再举个列子:

3.c语言结构体成员内存对齐详解求这个结构体大小

3.c语言结构体成员内存对齐详解为十二个字节,这里有个有意思的地方,当short放到小单位里面是要以两个字节对齐,所以放在后面的两个字节中