C语言 为什么结构变量之间的差异总是在 64 位操作系统中给出 16 字节


#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 字节对齐。有时编译器可能会将字节填充到结构元素中,以保持单词或双单词对齐。您可以检查字节填充发生的位置,我的意思是字节或在元素级别或结构级别填充。

请打印每个元素地址(如下所示(并查看它们之间的区别。

printf("Size:%u %u Address_Diff:%d n",&p.c, &p.e);

如果差值只有一个字节,则意味着字节在结构级别填充,即在结构的末尾。

相关内容

最新更新