我认为计算数字的模是一个有点昂贵的操作,至少与简单的算术测试(例如查看数字是否超过数组的长度)相比。如果确实如此,那么替换例如以下代码是否会更有效:
res = array[(i + 1) % len];
与以下? :
res = array[(i + 1 == len) ? 0 : i + 1];
第一个对眼睛来说更容易,但我想知道第二个是否会更有效。如果是这样,当使用编译语言时,我是否可以期望优化编译器将第一个片段替换为第二个片段?
当然,这种“优化”(如果它确实是一种优化)并不在所有情况下都有效(在这种情况下,它仅在以下情况下有效)i+1
永远不会超过len
).
我的一般建议如下。使用您认为更直观的版本,然后分析整个系统。仅优化探查器标记为瓶颈的代码部分。我敢打赌,模运算符不会出现在其中。
就具体示例而言,只有基准测试才能判断使用特定编译器在特定架构上哪个更快。您可能会将模替换为分枝 http://software.intel.com/en-us/articles/avoiding-the-cost-of-branch-misprediction,而且这并不明显,哪个会更快。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)