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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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\\n", &a);
16 
17     system("pause");
18 }
结构体代码

 

 

 

 

技术分享图片

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

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

 

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

三.几个例子

技术分享图片这是这个结构体的内存大小为12

再举个列子:

技术分享图片求这个结构体大小

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

 

以上是关于3.c语音结构体成员内存对齐详解的主要内容,如果未能解决你的问题,请参考以下文章

详解结构体内存对齐

[.NET] 结构体布局详解与结构体内存对齐具体方式

[.NET] 结构体布局详解与结构体内存对齐具体方式

内存对齐的原则

Visual Studio2008 C++结构体成员需要内存对齐吗?

梦开始的地方 —— C语言结构体详解