首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >n/=10和n=n/10的差异

n/=10和n=n/10的差异
EN

Stack Overflow用户
提问于 2013-04-08 20:45:03
回答 4查看 5.7K关注 0票数 3

n/=10n=n/10在执行速度方面有什么不同吗?

就像n----n在执行速度上的不同一样...

EN

回答 4

Stack Overflow用户

发布于 2013-04-08 20:54:55

不,不是真的:

[C99: 6.5.16.2/3]:形式的复合赋值与简单赋值表达式E1 = E1 op (E2)的唯一不同之处在于,左值E1只计算一次。

因此,只有当您的n是一个具有副作用(如函数调用)的非平凡表达式时,这才会产生后果。

否则,我认为在理论上会涉及到一个中间临时变量,但你必须非常不幸,这样的临时变量才能在编译后的可执行文件中真正存在。您将不会看到这两种方法之间的任何性能差异。

通过基准测试和比较生成的程序集来确认这一点。

票数 5
EN

Stack Overflow用户

发布于 2013-04-08 20:59:18

给定以下C代码:

代码语言:javascript
复制
int f1(int n) {
   n /= 10;
   return n;
}

int f2(int n) {
   n = n / 10;
   return n;
}

gcc -O4编译的结果基本上是

代码语言:javascript
复制
f1:
        movl    %edi, %eax
        movl    $1717986919, %edx
        sarl    $31, %edi
        imull   %edx
        sarl    $2, %edx
        subl    %edi, %edx
        movl    %edx, %eax
        ret

f2:
        movl    %edi, %eax
        movl    $1717986919, %edx
        sarl    $31, %edi
        imull   %edx
        sarl    $2, %edx
        subl    %edi, %edx
        movl    %edx, %eax
        ret

我省略了一些样板文件,它实际上是清单的一部分。

在此特定情况下,两个替代方案之间没有区别。

根据所使用的编译器、执行指令的实际环境和编译器优化级别,生成的代码可能会有所不同。但是,您可以始终使用此方法来检查生成的机器码是否不同。

票数 2
EN

Stack Overflow用户

发布于 2013-04-08 22:51:14

b/w两者没有区别。

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

https://stackoverflow.com/questions/15879388

复制
相关文章

相似问题

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