内存对齐保证

Memory Alignment Guarantee

下面的代码可以交叉编译吗?

struct Foo {
  alignas(1) char c1;
  alignas(1) char c2;
  alignas(4) int i;
};
static_assert(sizeof(Foo) == (sizeof(int) + 4), "No cross-compilable");

换句话说,是否保证 sizeof(Foo) == (sizeof(int) + 4) 对于任何 architecture/platform?

不保证。这适用于当今的许多体系结构,但在具有 8 字节 int(在 8 字节边界上对齐)的系统上,这将不起作用。但是,在那种情况下,您应该获得编译器诊断,因为您正试图对 int; 应用不太严格的对齐方式。参见 [dcl.align]。