在下列用法方面,请用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)
因此,即使没有任何优化器开关,所有四个语句都编译为完全相同的机器代码.
您无法在C中对执行时间进行评级,因为它不是执行的C代码.您必须分析使用在特定计算机上运行的特定编译器编译的可执行代码以获得评级.
此外,对单个操作进行评级并不能为您提供真正可以使用的功能.今天的处理器并行执行多个指令,因此操作的效率很大程度上取决于它与周围代码中的指令配对的程度.
因此,如果您确实需要使用性能最佳的那个,则必须对代码进行分析.否则(大约98%的时间)你应该使用最可读的那个,并最好地传达代码正在做的事情.