我假设计算一个数的模是一个有点昂贵的操作,至少与简单的算术测试(例如查看一个数是否超过数组的长度)相比是这样。如果确实是这样的话,是不是换成更高效的,比如下面的代码:
res = array[(i + 1) % len];
与以下? :
res = array[(i + 1 == len) ? 0 : i + 1];
第一个比较舒服,但我想知道第二个是否更有效率。如果是这样,我是否希望优化编译器在使用编译语言时用第二个片段替换第一个片段?
当然,这种“优化”(如果它确实是一种优化)并非在所有情况下都有效(在这种情况下,它仅在 i+1
永远不会超过 len
).
最佳答案
我的一般建议如下。使用您认为更容易使用的版本,然后对整个系统进行概要分析。只优化探查器标记为瓶颈的代码部分。我敢打赌模运算符不会出现在其中。
就具体示例而言,只有基准测试才能判断使用特定编译器在特定架构上哪个更快。您可能会将模数替换为 branching ,而且显然哪个更快。
关于c - 尽可能避免使用 mod 运算符是否更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15596318/