c++ - C中If-Else和三元运算符之间的速度差异...?

标签 c++ performance ternary-operator

所以在一位同事的建议下,我刚刚测试了三元运算符和等效的 If-Else block 之间的速度差异......似乎三元运算符产生的代码比 If- 快 1 到 2 倍别的。我的代码是:

  gettimeofday(&tv3, 0);
  for(i = 0; i < N; i++)
  {
     a = i & 1;
     if(a) a = b; else a = c;
  }
  gettimeofday(&tv4, 0);


  gettimeofday(&tv1, 0);
  for(i = 0; i < N; i++)
  {
     a = i & 1;
     a = a ? b : c;
  }
  gettimeofday(&tv2, 0);

(抱歉使用了 gettimeofday 而不是 clock_gettime...我会努力提高自己。)

我尝试更改 block 的计时顺序,但结果似乎仍然存在。是什么赋予了?此外,If-Else 在执行速度方面表现出更多的可变性。我应该检查 gcc 生成的程序集吗?

顺便说一句,这都是在优化级别零 (-O0) 下进行的。

这是我的想象,还是有什么我没有考虑到的东西,或者这是一个依赖于机器的东西,还是什么?感谢您的帮助。

最佳答案

三元运算符很有可能被编译成 cmov,而 if/else 编译成 cmp+jmp。只需看一下程序集(使用 -S)即可确定。启用优化后,无论如何都不再重要,因为任何好的编译器都应该在两种情况下生成相同的代码。

关于c++ - C中If-Else和三元运算符之间的速度差异...?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6754454/

相关文章:

android - 将 SQLite 添加到 Android NDK 项目

python - 快速斐波那契计算

java - 三元运算符的使用

c++ - 查找节点树的最大路径总和

c++ - 具有可变多维 initializer_list 的构造函数

performance - Delphi ADO 数据集过滤器

Java 三元运算符不起作用?

powershell - $prompt = ($defaultValue,$prompt)[[bool]$prompt] - 在 PowerShell 中模拟三元条件

c++ - 在单行中通过 XOR 交换整数。在 C++11 中真的允许吗?

PHP - 将字符串递归替换为数字需要很长时间