里面的变量怎么了?

时间:2016-11-09 19:11:42

标签: c++

该函数内的变量会发生什么变化?

void function()
{
   int a = 5;
   a += a; //a contain 10
}

int main()
{
   function();
   return 0;
}

所以在函数(function())执行完成后发生的事情是这个变量(a)是否仍然在内存中找到(使用内存),其最后一个值为(10)或者它完全被破坏而不再被破坏在记忆中?

3 个答案:

答案 0 :(得分:2)

它通常存储在堆栈中,即它是自动分配的,并且每个函数调用都会回收这些自动分配的内存。您的编译器可能会认为此变量实际上是无用的并且完全忽略它,因为它从未使用过并且不会影响代码的任何其他部分,因此可能发生的事情是:Nothing。

在C和C ++中,重要的是要记住局部变量之间存在巨大差异,这些变量被认为是自动分配的,只有在函数执行时才能存活,并通过指针和new动态分配。它会一直存在,直到它们被delete移除或程序终止。

答案 1 :(得分:2)

它没有真正指定。我先描述一下天真的案例,然后解释为什么它可能不适用。

虽然名称aa之外无法访问,但内存function仍然存在。内存可能包含或不包含10 - 编译器可以自由覆盖它或不打扰。显然,它之后的任何时候都可能被重复使用。

如果a 确实已在内存中分配,那可能位于称为(call)stack 的区域中,但这只是一个受欢迎的调用惯例,而不是语言要求。

现在,编译器也可以自由地将a存储在一个寄存器中,因为它注意到地址从未被采用,在这种情况下,传统意义上它永远不会 内存中。

编译器可以进一步注意到a根本不会被观察到使用,而且不会在function内发出任何代码。

答案 2 :(得分:0)

当函数结束所有局部变量时,基本上消失(更确切地说,当它们的块结束时它们会消失)。

谈论他们“留在记忆中”的“最后价值”是一个相当无意义的练习,因为他们的价值可能从一开始就没有记忆。即使它有,也不能保证它仍然存在,或者在任何意义上仍然可以访问该存储器。