鉴于我循环执行函数 Foo 多次:
int Foo(int a)
{
int b = 5;
return a * b;
}
我相信变量“b”被多次初始化(与我初始化函数 Foo 一样多次)。假设我不想将“b”移到函数 Foo 之外,我是否必须释放后续“b”初始化所占用的内存,还是自动完成?
鉴于我循环执行函数 Foo 多次:
int Foo(int a)
{
int b = 5;
return a * b;
}
我相信变量“b”被多次初始化(与我初始化函数 Foo 一样多次)。假设我不想将“b”移到函数 Foo 之外,我是否必须释放后续“b”初始化所占用的内存,还是自动完成?
这些是整数,可以存储在堆栈中,但在这种情况下不太可能。一旦变量超出范围,就不需要管理堆栈内存,它将从堆栈中弹出并释放内存。此外,当您(正确地)使用托管对象时,您几乎不必担心在 .net 中手动管理内存。
有关这些值是否实际存储在堆栈中的更多信息,或者看不到Marc Gravell 的这个答案。此外,正如该答案中所指出的,Eric Lippert 对此写了一篇写得很好的文章(从 2009 年开始,但变化不大)。
来自 Marc Gravell 的回答
它们有时是,但不是:
- 类上的字段
- 捕获的变量
- 迭代器块中的变量