我从简单的例子中注意到,alignof(struct_name)始终是其结构成分的最大alignof的alignof。这种情况总是(或几乎总是如此)吗?
发布于 2017-09-02 03:15:38
结构的
alignof总是其成分的最大alignof吗?
alignof宏扩展到_Alignof运算符,该运算符计算其操作数的对齐要求。如何确定对齐需求的大多数方面都是由实现定义的,因此从这个意义上说,假设您的建议总是或甚至通常都适用是不安全的。
然而,您观察到的模式还是很常见的。为了使实现确保给定结构类型的每个实例的每个成员都根据该成员类型的对齐要求对齐,实现必须为总体结构类型选择至少与其任何成员的最大对齐要求相同的对齐要求。另一方面,选择最小的对齐需求有助于有效地使用内存。这些组合导致了您观察到的对齐行为。
然而,我重申,调整需求在很大程度上是由实现定义的。即使不考虑_Alignas操作符的影响,实现也没有义务根据您的模式选择结构对齐需求。例如,实现可以选择(至少)为每种结构类型分配(至少)最大基本对齐方式,而不管其成员类型如何。
然而,最终,人们不得不怀疑为什么你会在意。这是罕见的,虽然不是闻所未闻的,你需要知道或应该依赖于你的类型的对齐要求。如果您确实想要一个特定的对齐需求,那么直接声明它比尝试使用成员的类型来影响它要好得多。
https://stackoverflow.com/questions/46009715
复制相似问题