结构的`alignof`是否始终是其成分的最大“对齐”?

时间:2017-09-02 01:35:14

标签: c

我注意到,通过简单的示例,alignof(struct_name)始终是其结构成分的最大alignof的{​​{1}}。这总是(或几乎总是)这种情况吗?

1 个答案:

答案 0 :(得分:3)

  

结构的alignof是否始终是其成分的最大alignof

alignof宏扩展为_Alignof运算符,该运算符计算其操作数的对齐要求。如何确定对齐要求的大多数方面都是实现定义的,因此从这个意义上来说,假设你的命题总是或者甚至通常都存在是不安全的。

然而,您观察到的模式很常见。为了使实现能够确保给定结构类型的每个实例的每个成员根据该成员类型的对齐要求进行对齐,实现必须为整体结构类型选择一个对齐要求,该要求至少是与其任何成员的最大对齐要求一样大。另一方面,选择尽可能小的对齐要求有助于有效地使用存储器。这些组合会导致您观察到的对齐行为。

但是,我重申,对齐要求大部分是实现定义的。即使不考虑_Alignas运算符的影响,实现也没有义务根据您的模式选择结构对齐要求。例如,实现可以选择(至少)为每个结构类型分配(至少)最大基本对齐,而不管其成员类型如何。

然而,最终,人们不禁要问为什么要关心。您需要知道或者应该依赖于类型的对齐要求,这是罕见的,尽管不是闻所未闻。如果你想要一个特定的对齐要求,你最好直接宣布它,而不是试图使用成员'影响它的类型。