内存对齐保证

时间:2017-11-25 19:28:29

标签: c++ cross-compiling memory-alignment

以下代码是否可以交叉编译

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)

1 个答案:

答案 0 :(得分:2)

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