gpt4 book ai didi

c - a+=b 和 a=a+b 之间的性能差异

转载 作者:太空狗 更新时间:2023-10-29 17:11:45 25 4
gpt4 key购买 nike

我知道下面的两个语句给出相同的结果:

a+=b; 
a=a+b;

a += b 的情况下,a 只计算一次,而在 a = a + b 的情况下,a 被评估两次。

两者在性能上有什么区别吗?如果不是,是否存在上述差异的任何变体?

最佳答案

来自标准(第 6.5.16.2 节,第 3 点):

A compound assignment of the form E1 op = E2 differs from the simple assignment expression *E1 = E1 op (E2) only in that the lvalue E1 is evaluated only once.

也就是说,如果你正在做

*a += 1

它只会确定目标位置一次而不是两次。对于您示例中的“简单”变量,它可能没有太大区别。当然,如果编译器知道不需要做两次,它仍然可以优化并做一次。如果有其他实体可以更改指针(例如另一个线程),则存在真正的区别。

编辑:也许更好的例子是像下面这样奇怪的东西(在我的例子中滥用了 &b == &a-1 的事实):

int a, b, *p;

a = 1; b = 5; p = &a;
*p += (--p == &b) ? 1 : 0;
printf("%d %d\n",a,b); // prints 1 6, because --p happens first, then *p

a = 1; b = 5; p = &a;
*p = *p + ((--p == &b) ? 1 : 0);
printf("%d %d\n",a,b); // prints 1 2, because the second *p is evaluated first,
// then --p and then the first *p

关于c - a+=b 和 a=a+b 之间的性能差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38393117/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com