gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:33:20 26 4
gpt4 key购买 nike

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com