【发布时间】:2015-11-11 18:56:25
【问题描述】:
#include<stdio.h>
struct std
{
char c;
char e;
};
void main()
{
struct std p,q;
int start,last;
last= &q;
start= &p;
printf("Size:%u %u Address_Diff:%d \n",&p, &q,(last-start) );
}
我正在学习结构对齐和填充,而我们每次执行上面的程序时两个结构变量之间的时间差显示 16 个字节。我不明白为什么差异是 16 个字节,但我希望差异是 2 个字节。
一些例子:
4077309424 4077309440 差异:16
3600238672 3600238688 差异:16
3272011008 3272011024 差异:16
【问题讨论】:
-
因为填充后的结构体大小为 16 个字节(每个单个字节额外填充 7 个字节)。
-
@EugeneSh。这里显示的结构很可能没有以任何形式填充,并且它的大小为 2,至少在所有常见平台上是这样。