0
#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个字节。为什么在64位操作系统中,结构变量之间的差异始终是16字节?
一些例子:
4077309424 4077309440 DIFF:16
3600238672 3600238688 DIFF:16
3272011008 3272011024 DIFF:16
由于填充结构的大小是16个字节(每个单字节填充了额外的7个字节)。 –
@EugeneSh。这里显示的结构几乎都没有填充任何形式的形状,其大小为2,至少在所有常见平台上。 – nos