我想知道在每一个循环代码中,某个版本是否比第二个版本消耗更少的内存,如果在某些版本中我们为每个循环周期中的变量分配了新空间,那是真的。
注意: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;
}
答案 0 :(得分:4)
编译器决定您的函数需要多少堆栈存储位置,并将尽其所能减少这种需求。类似的东西:
{
int a;
...
}
{
int b;
...
}
似乎需要两个存储位置,但编译器可以看到第一个从未在第一个范围之外使用,并且可以重新使用b的位置。
它也可能看到它可以一起消除堆栈存储并在寄存器中执行整个操作。
无论循环与否,单个变量声明定义单个存储位置。永远不会出现为循环的每次迭代创建新存储位置的情况。
一般来说,这不是你需要关注的事情。
请注意,“debug”构建可能会在堆栈上为声明的每个变量生成单独的存储位置,以便在调试时更容易查看这些变量。
答案 1 :(得分:0)
没关系。编译器对其进行优化,因此它保持不变。在C#等编译语言中,它不应该影响性能。例如,在Java中,最好只声明一次。
答案 2 :(得分:0)
正确的方法是拆解它,然后查看代码。你会看到对每个人的引用。
链接到MSDN的方式:http://msdn.microsoft.com/en-us/library/f7dy01k1.aspx
代码在CIL中非常易读。只需搜索功能名称,您就会看到对new等的调用。