我目前正在尝试构建一个代码,该代码适用于各种机器,从手持式口袋和传感器到数据中心中的大型服务器。检测目标CPU上对齐的内存要求
这些体系结构之间的(许多)差异之一是对齐内存访问的要求。
“标准”x86 CPU上不需要对齐内存访问,但许多其他CPU需要它,并且在不遵守规则时会产生异常。
到目前为止,我一直在通过使用packed属性(或pragma)强制编译器对已知有风险的特定数据访问进行谨慎处理。它工作正常。
问题是,编译器非常谨慎,以至于在这个过程中大量的性能丢失了。因为性能很重要,所以我们最好重写代码的某些部分以专门处理严格对齐的cpus。另一方面,这样的代码在支持未对齐内存访问的cpus(比如x86)上会更慢,所以我们希望在需要严格对齐内存访问的cpus上使用它只有。
现在问题: 如何在编译时检测到目标架构需要严格对齐的内存访问? (或其他方式)
有趣。这确实是我开始这样做的方式,但显然,我不知道所有的架构在那里......顺便说一句,没有不幸的是,我没有“直接”访问所有这些架构,所以我必须猜测提前解决大部分问题,以避免在代码维护阶段出现太多并发症。 – Cyan 2012-02-18 00:52:31
您无法了解所有架构,但声称支持您无法访问的架构是不负责任的,至少如果您正在编写C语言。 – 2012-02-18 01:55:02
我完全同意。我的目标主要是为其他人定制软件包,以便为其自己的目标架构进行定制。准备得越好,下游越容易。但正如你所说,我不能“声称”完全验证它。尽管如此,与“我不在乎”相比,优秀的软件设计仍然具有优势。 – Cyan 2012-02-20 10:03:09