gpt4 book ai didi

c - 强制结构与 `__attribute__((packed,aligned(N)))` 对齐是否具有前瞻性?

转载 作者:太空狗 更新时间:2023-10-29 15:05:17 24 4
gpt4 key购买 nike

我有一个结构,其相关部分是:

typedef struct {
uint64_t *num;
...
} name;

在大多数架构中它自然会对齐 8,但出于某些原因(遗留原因),我需要它具有对齐 4,因为我可以保证后者对齐,但不能保证前者对齐。

我找到的解决方案是将 __attribute__((packed,aligned(4))) 添加到声明中。
我已经在 godbolt.com 上对其进行了测试,它确实有效并在他们拥有的每个架构上产生了正确数量的负载。

GCC docs没有特别提到这个组合,而且 clang 文档根本没有提到这些属性。

我的问题是,它的可移植性(在类 unix 环境之间)和面向 future 的程度如何?
明年的 GCC/clang 能打破这一切吗?

我应该更喜欢 #pragma pack(4) 吗,它看起来非常相似?

最佳答案

__attribute__(packed) 用于 gcc,其他一些编译器(如 clang)可能理解它,但其他编译器(如 visual studio)不会...C 编译器将使用任何正常的 abi,​​请参阅:The Lost Art of C Structure Packing

真正你能做的最好的事情就是找到一个最佳的天然包装:

将它们从大到小排序......你最终会得到自然打包的最小结构......

或者如果您只需要在 Linux 上使用 GCC,那么只需使用 packed 属性并继续您的快乐方式,要知道它不会在任何地方都有效。

关于c - 强制结构与 `__attribute__((packed,aligned(N)))` 对齐是否具有前瞻性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46526226/

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