重新分配一个已存储在目标变量中的值是否会导致重写和更长的 运行 时间?

Does the reassignment of one value which is already stored in the destination variable cause rewriting and longer run-time?

我真正关心的是,如果我编写一个导致将值赋值给变量的表达式,而我要赋值的值已经存储在其中,会发生什么情况。

例如:

#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++ 的,因为我同时使用这两种语言,所以我不想两次提出相同的问题。如果这两种选择之间的答案,请提及哪种语言是重点。

让我们试试 here:

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

现在 var = 1; 不会转换为任何程序集。它已被优化掉。即使 int var = 1; 已被优化掉,1 的值现在已针对该 printf 调用进行了硬编码。

通常它取决于编译器、选项、语言以及可能的许多其他因素。现在现代编译器经常会优化这样的代码,但如果你想确定,你应该总是自己尝试。