鉴于我多次循环执行函数Foo:
int Foo(int a)
{
int b = 5;
return a * b;
}
我相信变量“b”被多次初始化(与初始化函数Foo一样多次)。假设我不想在函数Foo之外移动“b”,我是否必须释放后续“b”初始化所声称的内存,还是自动完成?
答案 0 :(得分:3)
这些是整数,可以存储在堆栈中,但在这种情况下不太可能。堆栈内存不需要像变量超出范围一样进行管理,它会从堆栈中弹出并释放内存。当您使用托管对象(正确)时,您也很少担心手动管理.net中的内存。
有关这些值是否实际存储在堆栈中的更多信息,请参阅this answer by Marc Gravell。另外,正如答案所指出的那样,Eric Lippert a well written article就此而言(从2009年开始,但没有太大变化)。
来自Marc Gravell的回答
它们有时是,但不是:
- 类上的字段
- 捕获的变量
- 迭代器块中的变量