关于结构的边界问题

时间:2011-06-17 11:42:29

标签: c

我想知道关于结构尺寸分配的边界问题是什么? 我可以谷歌相同的任何关键字都会有所帮助。

1 个答案:

答案 0 :(得分:3)

要计算用户定义类型的大小,编译器会考虑复杂的用户定义数据结构所需的任何alignment空间。这就是为什么C中结构的大小可以大于其成员大小的总和。例如,在许多系统上,以下代码将打印 8

struct student{
  char grade; /* char is 1 byte long */
  int age; /* int is 4 bytes long */
};

printf("%zu", sizeof (struct student));

原因是大多数编译器默认情况下将复杂的数据结构与word对齐边界对齐。此外,各个成员也与它们各自的对齐边界对齐。通过这种逻辑,结构学生在单词边界上对齐,并且结构内的变量年龄与下一个单词地址对齐。这是通过编译器在两个成员之间插入“填充”空间或结构的末端来实现的,以满足对齐要求。插入此填充以使年龄与单词边界对齐。 (大多数processors可以比获取跨越内存中多个单词的单词值更快地获取aligned word,而有些单词根本不支持该操作。

参考文章:data structure alignmentStructure padding