gpt4 book ai didi

c++ - 检索数据结构对齐信息

转载 作者:太空狗 更新时间:2023-10-29 23:19:05 30 4
gpt4 key购买 nike

在大多数“通用”C/C++ 编译器(gcc/g++、通用智能手机编译器、Visual C++ 等...)中是否有可用的机制来检索或生成 data structure alignment信息? (请注意,该术语包含对齐、填充和排列。)我希望获得此信息,而无需在目标平台上运行任何 C/C++ 代码。

(例如,此类数据能否在支持它的编译器上可靠地通过 DWARF/DWARF2 获得?)

更新:是的,可以使用 pahole与海合会。 (我想知道这是否适用于 mingw32,如果适用,用于输出 DWARF2 数据的“-g”标志是否会修改代码生成。)不幸的是,gcc 不是我必须支持的唯一编译器。 (Visual C++ 是最有可能的第二个候选者。)

更新 2: 对于 Visual C++ this看起来很有前途。我相信在 Visual C++ 和 g++ 之间,涵盖了 Windows、Linux、Mac OS X、iOS 和 Android NDK。

更新 3: 仅供引用,我获取此类信息的主要原因是避免在 CPU 受限条件下为高性能加载反序列化。除了编写一些使用数据结构对齐信息的自定义工具之外,如果您能想到更好的方法来实现这一点,请随时发帖。我投票的手指痒痒的。

最佳答案

我不确定其他编译器,但在 VC 中,您可以强制结构成员与 pragma 对齐。事实上,如果您正在编写一个使用结构的 IPC 机制,您应该以编程方式强制对齐两个进程使用的任何声明。这样,如果任一应用程序偏离标准结构成员对齐方式,您就可以消除潜在的错误。

#pragma pack(push, 1) // forces 1 byte alignment

typedef struct
{
int sample;
char sample2;
}FIVE_BYTES;

#pragma pack(pop) // returns to whatever alignment was in use prior to the push

See MSDN for more information

关于c++ - 检索数据结构对齐信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10824450/

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