【发布时间】:2020-08-19 07:19:37
【问题描述】:
正如我上面所说,这是不好的做法吗?在 ASM 中它会是什么样子?我的意思是,我不知道它是否被翻译成这样:
arr[0] = value;
arr[1] = value;
或者是这样的:
arr[1] = value;
arr[0] = arr[1];
第二个显然效率更低(imm vs mem)。
提前致谢。
【问题讨论】:
-
好吧,我想,任何好的编译器都会优化它。而在 (x86) 汇编器中,它更像是“缓存与依赖链”。
-
编译器非常擅长优化这类事情。您不必太担心这里的性能,因为如果启用优化,编译器可能会从两者生成相同的代码。请注意,如果您对此感兴趣,大多数 C 编译器都提供了一种检查其汇编输出的方法。
-
只做前者。可读且高效。后者的意义何在?可读性差,效率也不高。
-
后者符合语言而前者不符合,尽管优化会定期绕过中间值。如果变量是全局的,那么有一个时间假设,我希望是后者。
标签: c operators operator-precedence assignment-operator