当我阅读问题时,我记得曾经有人(很多年前)告诉我,从汇编程序的角度来看,这两种操作是非常不同的:
n = 0;
n = n - n;这是真的吗,如果是的话,为什么是这样呢?
编辑:--正如一些答复所指出的,我认为这对于编译器优化到同一件事情是相当容易的。但我发现有趣的是,如果编译器有一种完全通用的方法,它们为什么会有所不同。
发布于 2009-05-15 09:31:31
编写您经常使用的汇编程序代码:
xor eax, eax而不是
mov eax, 0这是因为对于第一个语句,您只有操作码,没有涉及到的参数。您的CPU将在1 cylce (而不是2)中做到这一点。我认为您的情况类似(虽然使用sub)。
发布于 2009-05-15 09:31:24
编译器VC++ 6.0,没有优化:
4: n = 0;
0040102F mov dword ptr [ebp-4],0
5:
6: n = n - n;
00401036 mov eax,dword ptr [ebp-4]
00401039 sub eax,dword ptr [ebp-4]
0040103C mov dword ptr [ebp-4],eax发布于 2009-05-15 09:27:49
优化编译器将为这两个程序集生成相同的汇编代码。
https://stackoverflow.com/questions/867727
复制相似问题