我通过简单的例子注意到 alignof(struct_name)
始终是其结构成分的最大 alignof
的 alignof
。是否总是(或几乎总是)情况如此?
最佳答案
alignof
宏扩展为 _Alignof
运算符,它计算其操作数的对齐要求。如何确定对齐要求的大多数方面都是实现定义的,因此从这个意义上说,假设您的命题始终或什至通常成立是不安全的。
然而,您观察到的模式仍然很常见。为了让实现确保给定结构类型的每个实例的每个成员都根据该成员类型的对齐要求对齐,实现必须为整个结构类型选择一个对齐要求,该要求至少与其任何成员的最大对齐要求。另一方面,选择尽可能小的对齐要求有助于有效使用内存。这些的组合导致您观察到的对齐行为。
然而,我重申,对齐要求大部分是由实现定义的。即使不考虑 _Alignas
运算符的影响,实现也没有义务根据您的模式选择结构对齐要求。例如,实现可以选择(至少)为每个结构类型分配最大的基本对齐,而不管其成员类型如何。
然而,最终,人们不得不想知道你为什么关心。尽管并非闻所未闻,但您很少需要知道或应该依赖于您的类型的对齐要求。如果您确实需要特定的对齐要求,那么直接声明它比尝试使用成员的类型来影响它要好得多。
关于c - 结构的 `alignof` 是否总是其成分的最大 `alignof`?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46009715/