0

鉴于我循环执行函数 Foo 多次:

int Foo(int a)
{
int b = 5;
return a * b;
}

我相信变量“b”被多次初始化(与我初始化函数 Foo 一样多次)。假设我不想将“b”移到函数 Foo 之外,我是否必须释放后续“b”初始化所占用的内存,还是自动完成?

4

1 回答 1

3

这些是整数,可以存储在堆栈中,但在这种情况下不太可能。一旦变量超出范围,就不需要管理堆栈内存,它将从堆栈中弹出并释放内存。此外,当您(正确地)使用托管对象时,您几乎不必担心在 .net 中手动管理内存。

有关这些值是否实际存储在堆栈中的更多信息,或者看不到Marc Gravell 的这个答案。此外,正如该答案中所指出的,Eric Lippert 对此写了一篇写得很好的文章(从 2009 年开始,但变化不大)。

来自 Marc Gravell 的回答

它们有时是,但不是:

  • 类上的字段
  • 捕获的变量
  • 迭代器块中的变量
于 2017-02-09T20:51:23.137 回答