我想知道在每对循环代码中,某个版本是否比第二个版本消耗的内存更少,以及在某些版本中我们是否真的在每个循环周期中为变量分配了新空间。
注意:2 很明显,1 和 3 更有趣..
1。
While(!exit)
{
int x = 5;
}
对比:
int x= 0;
While(!exit)
{
x = 5;
}
引用类型的相同问题: 2。
While(!exit)
{
Point p = new Point();
p.x = 5;
}
对比:
Point p = new Point();
While(!exit)
{
p.x = 5;
}
3。没有分配的引用类型类似于 1?:
While(!exit)
{
Point p = point1;
}
对比:
Point p = null;
While(!exit)
{
p = point1;
}
最佳答案
编译器决定您的函数需要多少堆栈存储位置,并将尽其所能减少该需求。像这样的东西:
{
int a;
...
}
{
int b;
...
}
似乎需要两个存储位置,但编译器可以看到第一个从未在第一个范围之外使用,并且可以为 b 重新使用该位置。
它可能还会看到它可以一起取消堆栈存储并在寄存器中执行整个操作。
无论循环与否,单个变量声明都定义了一个存储位置。永远不会为循环的每次迭代创建新的存储位置。
一般来说,这不是您需要关心的事情。
请注意,“调试”构建可能会在堆栈上为声明的每个变量生成单独的存储位置,以便在调试时更轻松地查看这些变量。
关于c# - 在循环内部与外部定义变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13883392/