问题说明了一切。有没有人知道以下…
size_t div(size_t value) {
const size_t x = 64;
return value / x;
}
…优化成?
size_t div(size_t value) {
return value >> 6;
}
编译器会这样做吗? (我的兴趣在于 GCC)。在某些情况下可以做到,而在其他情况下不可以?
我真的很想知道,因为每次我写一个可以像这样优化的分区时,我都会花一些精力去思考是否浪费了一秒钟宝贵的时间来做一个轮班就足够了的分区。
原文由 porgarmingduod 发布,翻译遵循 CC BY-SA 4.0 许可协议
即使使用
g++ -O0
(是的,-O0
!),这种情况也会发生。您的函数编译为:注意
shrq $6
,它是右移 6 位。使用
-O1
,删除不必要的垃圾:在 g++ 4.3.3、x64 上的结果。