This question already has answers here:
What exactly is the “as-if” rule?
(3个答案)
3个月前关闭。
我真正担心的是,如果我编写了一个表达式,该表达式导致将值分配给变量,而要分配的值已经存储在该变量中。
例如:
是否会将
还是看起来只是跳过了分配命令?
我已经找到了确切的答案,但是我找不到此处已经提出的内在问题,而且在我看来也找不到C99。
这个问题是针对C和C ++的,因为我都使用C和C ++,所以我不想两次提出相同的问题。如果这两种选择之间都存在答案,请说明重点关注哪种语言。
(3个答案)
3个月前关闭。
我真正担心的是,如果我编写了一个表达式,该表达式导致将值分配给变量,而要分配的值已经存储在该变量中。
例如:
#include <stdio.h>
int main(void)
{
int var = 1;
printf("The actual value of var is %d",var);
var = 1; // What happens exactly if I bring in this expression?
// Does it rewrite the memory?
return 0;
}
是否会将
1
的值重写为内存中的var
,这会导致更长的运行时间吗?还是看起来只是跳过了分配命令?
我已经找到了确切的答案,但是我找不到此处已经提出的内在问题,而且在我看来也找不到C99。
这个问题是针对C和C ++的,因为我都使用C和C ++,所以我不想两次提出相同的问题。如果这两种选择之间都存在答案,请说明重点关注哪种语言。
最佳答案
让我们尝试here:
如您所见,此编译器将重新分配该值。 var = 1;
语句转换为mov
指令。现在让我们以更高的优化级别进行尝试:
现在var = 1;
不会转换为任何程序集。它已经过优化。即使int var = 1;
已被优化,现在1
的值也已为该printf
调用硬编码。
通常,它取决于编译器,选项,语言以及可能的许多其他内容。如今,现代的编译器通常会优化此类代码,但是如果您想确定的话,应该始终自己尝试一下。