Tag: 预定义宏

检测目标CPU上的对齐内存要求

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

如何写一个’clamp’/’clip’/’bound’宏来返回给定范围内的值?

我经常发现自己在写类似的东西 int computedValue = …; return MAX(0, MIN(5, computedValue)); 我希望能够将其写为单个单行宏。 它必须没有副作用,就像现有的系统宏MIN和MAX一样,并且应该适用于与MIN和MAX相同的数据类型。 任何人都可以告诉我如何将其变成一个宏吗?