This question already has answers here:
What exactly is the “as-if” rule?
                                
                                    (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

c&#43;&#43; - 重新存储已经存储在目标变量中的一个值是否会导致重写并延长运行时间?-LMLPHP

如您所见,此编译器将重新分配该值。 var = 1;语句转换为mov指令。现在让我们以更高的优化级别进行尝试:

c&#43;&#43; - 重新存储已经存储在目标变量中的一个值是否会导致重写并延长运行时间?-LMLPHP

现在var = 1;不会转换为任何程序集。它已经过优化。即使int var = 1;已被优化,现在1的值也已为该printf调用硬编码。

通常,它取决于编译器,选项,语言以及可能的许多其他内容。如今,现代的编译器通常会优化此类代码,但是如果您想确定的话,应该始终自己尝试一下。

08-26 18:59
查看更多