我目前正在尝试构建一个可以在各种机器上运行的代码,从手持口袋和传感器到数据中心的大型服务器。
这些架构之间的(许多)差异之一是对齐内存访问的要求。
“标准”x86 CPU 上不需要对齐内存访问,但许多其他 CPU 需要它,如果不遵守规则,则会产生异常。
到目前为止,我一直在通过使用打包属性(或 pragma)强制编译器对已知有风险的特定数据访问保持谨慎来处理它。它工作正常。
问题是,编译器非常谨慎,以至于在此过程中损失了很多性能。
由于性能很重要,我们最好重写部分代码以专门用于严格对齐的 CPU。另一方面,这样的代码在支持非对齐内存访问(例如 x86)的 cpus 上会更慢,所以我们只想在需要严格对齐内存访问的 cpus 上使用它。
现在的问题是:如何在编译时检测目标架构是否需要严格对齐的内存访问?(或反过来)