c - 尽可能避免使用 mod 运算符是否更好?

标签 c performance optimization modulo

我假设计算一个数的模是一个有点昂贵的操作,至少与简单的算术测试(例如查看一个数是否超过数组的长度)相比是这样。如果确实是这样的话,是不是换成更高效的,比如下面的代码:

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/

相关文章:

jQuery (2.0.2) empty() html() 内存消耗持续增长

c++ - 在简单的 vector 实现中优化运行时间

c - gcd计算的优化

ios - 使用大量单元格优化 UIViewTable

c - C中动态输入程序的问题

c - 执行USB/Pendrive中编译的C

c - 为什么指针在 C 语言中如此重要?

python - 有没有更快的方法从字典中获取多个键?

c - 文字常量和普通变量之间的区别?

java - 使用静态私有(private)方法真的比实例私有(private)方法更快/更好吗?