【发布时间】:2020-09-03 11:50:18
【问题描述】:
这个程序:
struct alignas(4) foo {};
int main() { return sizeof(foo); }
返回 4,使用 GCC 10.1 和 clang 10.1,以及 icc 19.0.1。
这让我想知道 - alignas() 是否必须以这种方式影响 sizeof()?即增加超出结构最初大小的大小?或者 - 这种变化只是实施的特权吗?
【问题讨论】:
-
我记得和我的编程老师讨论过这个问题。 IIRC,由于要求数组在元素之间没有间隙,因此必须填充结构以使其大小成为对齐的倍数。
-
如果
foo f[10];不会以这种方式影响大小,它会做什么? -
"...当应用于类类型时,结果是该类对象的大小加上将此类对象放入数组所需的任何额外填充...." 来源:en.cppreference.com/w/cpp/language/sizeof
-
@RichardCritten:那么,是强制性的吗?
-
这是我的理解,但没有手的标准参考。
标签: c++ c++11 language-lawyer sizeof alignas