大多数“通用”C/C++ 编译器(用于 gcc/g++、通用智能手机的编译器、Visual C++ 等)中是否有可用的机制来检索或生成数据结构对齐信息?(请注意,该术语包括对齐、填充和排列。)我希望无需在目标平台上运行任何 C/C++ 代码即可获得此信息。
(例如,这些数据是否可以通过 DWARF/DWARF2 在支持它的编译器上可靠地获得?)
更新:是的,可以将pahole与 gcc 一起使用。(我想知道这是否适用于 mingw32,如果可以,用于输出 DWARF2 数据的“-g”标志是否会修改代码生成。)不幸的是,gcc 不是我必须支持的唯一编译器。(Visual C++ 是最有可能的第二个候选者。)
更新 2:对于 Visual C++ ,这看起来很有希望。我相信在 Visual C++ 和 g++ 之间,涵盖了 Windows、Linux、Mac OS X、iOS 和 Android NDK。
更新 3:仅供参考,我获取此类信息的主要原因是避免在 CPU 受限条件下为高性能加载而反序列化。如果您能想到比编写一些使用数据结构对齐信息的自定义工具更好的方法来实现这一点,请随时发布。我的投票手指很痒。