结构体内存对齐具体解释

Posted llguanli

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了结构体内存对齐具体解释相关的知识,希望对你有一定的参考价值。

.在32位机器上
设有以下说明和定义:
1234567891011 typedef union { long i; int k[5]; char c; } DATE; struct data { int cat; DATE cow; double dog; } too; DATE max;
则语句 printf(“%d”,sizeof(struct data)+sizeof(max));的运行结果是:
(答案:52)

这道题可能非常多同学都有误区。不明确内存对齐的真正含义,那么以下我来解说一下,首先共用体里面你们肯定都是明确的。DATE是一个union, 变量公用空间. 里面最大的变量类型是int[5], 占用20个字节. 所以它的大小是20 。
可是到了结构体里面。事实上它是这种。首先一个Int,然后后面5个int,再然后是一个double,所以最大的成员长度是8不是20,然后6个int刚刚24,然后加上8是32。加上共用体是52,假设你把第一个Int cat去掉,你仍然会发现。结构体大小还是32。由于8个字节内存对齐,前面2个int一组。最后还单一个int也要占8个字节。希望能对内存对齐不明确的童鞋有所帮助。

以上是关于结构体内存对齐具体解释的主要内容,如果未能解决你的问题,请参考以下文章

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

结构体内存对齐

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

详解结构体内存对齐

详解结构体内存对齐

结构体内存对齐