下面的语句执行了很多次:

iNormVal = iVal / uRatio;

如果大多数(90%)时间uRatio == 1
if(uRatio > 1)
iNormVal = iVal / uRatio;
else
iNormVal = iVal;

谢谢。。

最佳答案

你需要profile这个来测量,这太难猜了。编译器可能会判断您的错误并删除测试,因此请使用或不使用优化进行检查。
整数除法的实际成本可能相当低,特别是在现代桌面类处理器上。根据this PDF,32/32位分区的现代(wolfdale/nehalem/sandy bridge)的成本分别为14-23/17-28/20-28个周期。所以,如果你真的经常这么做的话,这可能会增加。在这种情况下,如果可能的话,查看并行(矢量化)选项。
如果可能的话,我会尽量避免它,因为它引入了一个分支。分支有两个缺点:它们通过引入程序员阅读代码必须理解的多条路径使代码更加复杂,而且它们还可能引入执行开销。

09-07 03:49