在C.Assume gcc中作为编译器执行效率方面的速率++ a,a ++,a = a + 1和a + = 1

abh*_*ity 5 c c++

可能重复:
在C++中i ++和++ i之间是否存在性能差异?

在下列用法方面,请用C中的执行时间进行评分.在一些访谈中,我被问到我应该在这些变化中使用哪些以及为什么.

a++
++a
a=a+1
a+=1
Run Code Online (Sandbox Code Playgroud)

fre*_*low 92

这是g++ -S产生的:

void irrelevant_low_level_worries()
{
    int a = 0;
//  movl    $0, -4(%ebp)

    a++;
//  incl    -4(%ebp)

    ++a;
//  incl    -4(%ebp)

    a = a + 1;
//  incl    -4(%ebp)

    a += 1;
//  incl    -4(%ebp)
}
Run Code Online (Sandbox Code Playgroud)

因此,即使没有任何优化器开关,所有四个语句都编译为完全相同的机器代码.

  • @Null:你是在谈论使用`a ++` vs.` ++ a`作为更大表达式的一部分?但是,测量性能无关紧要,因为这两个表达式会产生不同的结果...... (4认同)
  • @NullUserException:呃,不,他关闭了优化.+1 (2认同)

Guf*_*ffa 6

您无法在C中对执行时间进行评级,因为它不是执行的C代码.您必须分析使用在特定计算机上运行的特定编译器编译的可执行代码以获得评级.

此外,对单个操作进行评级并不能为您提供真正可以使用的功能.今天的处理器并行执行多个指令,因此操作的效率很大程度上取决于它与周围代码中的指令配对的程度.

因此,如果您确实需要使用性能最佳的那个,则必须对代码进行分析.否则(大约98%的时间)你应该使用最可读的那个,并最好地传达代码正在做的事情.

  • 翻译:这是一个愚蠢的问题,没有任何有意义的答案. (6认同)
  • @Steven Sudit:这不是一个愚蠢的问题,但是毫无意义且过时了.问题基于10年前相关的条件,但今天的硬件和编程文化完全不同于您编写代码的方式. (2认同)