c++结构与对齐成员的对齐方式

标签 c++ struct memory-alignment

struct 是否始终与该结构的最大对齐成员对齐?如果不是,如何自动执行,也许使用特定于 gcc 的扩展? (我知道有 __attribute((aligned(...)))__,但必须明确指定对齐方式)。

此行为在 c99、c++99 和 c++11 之间是否不同? c++11 是否有一些额外的规定来强制对齐?

示例: 使用以下代码,Foo 本身会自动对齐到 8 个字节,还是我也需要显式对齐它?

struct Foo{
    int i __attribute__((aligned(8)));
};

最佳答案

对齐是系统和处理器特定的属性。允许编译器尽力而为(并且必须了解处理器和系统的对齐约束)。

大多数 ABI 规范(例如 Linux 的 AMD64 ABI)包含一些对齐提示。

我确实相信对齐约束从字段传播到包含它们的聚合(例如 struct-s)。

如果您对动态分配的数据有不寻常的对齐约束,您可能需要显式对齐,例如通过使用 posix_memalign分配它们。 malloc和相关的分配器(包括 C++ 中的 ::operator new)可能不会比默认约束要求的更好。

关于c++结构与对齐成员的对齐方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9248878/

相关文章:

gcc - 我应该如何让 gcc 在进入函数的过程中将堆栈指针重新对齐到 16 字节边界?

c - 如何在 C 中分配和释放对齐内存

c++ - 字 rune 字的 U 前缀与字符串文字的区别是什么?

c++ - 将临时结构作为模板参数传递

c# - 在 C# 中更改结构的属性值

go - 如何克隆具有未导出字段的结构?

C++ 结构对齐到 1 字节导致 WinCE 崩溃

c# - HIDAPI - 在 c# 项目中使用

c++ - 使用整数作为模板参数时出现编译器错误

c++ - C++ 结构的函数