内存对齐保证
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]。
下面的代码可以交叉编译吗?
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]。