这些天经常在论坛上看到有人问关于结构体的sizeof的问题,要解答这个问题,首先就必须要了解字节对齐的问题。下面就对此部分内容做一个简要的小结,方便以后查阅。(部分内容参考网上的资料,如有错误请读者指正)。
首先我写了如下一段计算结构体大小的代码,测试一下我们所知道的理论是否和实际相同。
我对输出的结果进行一下简要的分析:
(1)第一个为什么输出为1呢?试想一个“不占空间”的变量如何被取地址、两个不同的“空结构体”变量又如何得以区分呢。于是,“空结构体”变量也得被存储,这样编译器也就只能为其分配一个字节的空间用于占位了。
(2)第二个为什么输出为40呢?1(一个char)+7(padding bytes)+8(一个double)+20(五个int,是5*4=20)+4(padding bytes)=40
(3)第二个为什么输出为32呢?1(一个char)+4(b[5]中的一个int)+3(padding bytes)+16(b[5]中其余的四个int)+8(一个double)=32
如果你对这几个结果还有什么疑问就请继续往下看。
[Part1:sizeof的定义及使用]
[Part2:字节对齐问题的探讨]