【发布时间】:2018-05-12 17:40:40
【问题描述】:
考虑这段代码:
// T is *any* type
struct str_T{
T a, b;
};
我知道(几乎总是)具有不同对齐方式的对象之间存在填充,因为这两个成员都是T 类型。但这一次没有不同的对齐方式。这个断言能一直通过吗?
static_assert(sizeof(str_T) == 2 * sizeof(T));
// i.e. padding-free
【问题讨论】:
-
_Alignof(str_T::a) == _Alignof(str_T::b)是真的吗? -
即使
struct成员之间没有填充,struct末尾可能的填充呢?这也将计入sizeof的结果中。 -
@chux 不,不同的结构类型肯定有不同的对齐要求。再次阅读您的报价:它谈论的是结构的指针,而不是结构本身。
标签: c struct language-lawyer padding