使用GCC 5.4.0进行昂贵的跳转
我有一个看起来像这样的函数(仅显示重要部分): double CompareShifted(const std::vector<uint16_t>& l, const std::vector<uint16_t> &curr, int shift, int shiftY) { ... for(std::size_t i=std::max(0,-shift);i<max;i++) { if ((curr[i] < 479) && (l[i + shift] < 479)) { nontopOverlap++; } ... } ... } 这样写,该功能在我的机器上花了〜34ms。将条件更改为布尔乘法(使代码如下所示)后: double CompareShifted(const std::vector<uint16_t>& l, const std::vector<uint16_t> &curr, int shift, int shiftY) { ... for(std::size_t i=std::max(0,-shift);i<max;i++) …