首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从执行效率的角度看++a、a++、a=a+1和a+=1作为编译器的作用

从执行效率的角度看++a、a++、a=a+1和a+=1作为编译器的作用
EN

Stack Overflow用户
提问于 2010-08-24 14:26:33
回答 10查看 13.4K关注 0票数 5

可能重复:

Is there a performance difference between i++ and ++i in C++?

在使用以下内容时,请按C中的执行时间来打分。在一些访谈中,我被问到在这些变化中我应该使用哪一种,以及为什么。

代码语言:javascript
复制
a++
++a
a=a+1
a+=1
EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2010-08-24 14:30:31

以下是g++ -S产生的内容:

代码语言:javascript
复制
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)
}

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

票数 92
EN

Stack Overflow用户

发布于 2010-08-24 14:34:54

您不能在C中评估执行时间,因为执行的不是C代码。您必须分析使用特定计算机上运行的特定编译器编译的可执行代码才能获得评级。

另外,对单个操作进行评级并不能给出您真正可以使用的东西。今天的处理器并行执行多个指令,因此一个操作的效率在很大程度上取决于它与周围代码中的指令的匹配程度。

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

票数 6
EN

Stack Overflow用户

发布于 2010-08-24 14:36:04

在这种情况下,这类事情实际上是很重要的,很少在两者之间。大多数情况下,这一点也不重要。事实上,我敢打赌,你就是这样的人。

对于一种语言/编译器/体系结构来说,事实可能不一定适用于其他语言。事实上,这一事实在更大的范围内是无关紧要的。了解这些并不能使你成为一个更好的程序员。

你应该学习算法、数据结构、渐近分析、清晰可读的编码风格、编程范例等等。这些技能在生成高性能和可管理的代码方面比了解这些低级细节重要得多。

不要过早优化,也不要微观优化.寻找全局优化。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3557489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档