代码在C#中
案例1
var p = new Person();
p = getPerson(p);
案例2
var p = new Person();
getPerson(p);
在上述情况下,是否会消耗额外的内存?
答案 0 :(得分:2)
假设getPerson
仅修改了Person
的属性,并且有2种不同的方法(一种返回一个人,而另一种则是无效的),那么此代码中没有明显的区别
static void Main(string[] args)
{
// example 1
var p = new Person();
p = getPerson1(p);
// example 2
var p2 = new Person();
getPerson2(p2);
}
示例1
IL_0001: newobj instance void ConsoleApp8.Person::.ctor()
IL_0006: stloc.0 // p
// [33 10 - 33 28]
IL_0007: ldloc.0 // p
IL_0008: call class ConsoleApp8.Person ConsoleApp8.Program::getPerson1(class ConsoleApp8.Person)
IL_000d: stloc.0 // p
示例2
IL_000e: newobj instance void ConsoleApp8.Person::.ctor()
IL_0013: stloc.1 // p2
// [36 4 - 36 19]
IL_0014: ldloc.1 // p2
IL_0015: call void ConsoleApp8.Program::getPerson2(class ConsoleApp8.Person)
IL_001a: nop
从评估堆栈的顶部弹出当前值并存储 将其放在指定索引处的本地变量列表中。
如果修补了操作码,则填充空格。没有有意义的操作 尽管可以消耗处理周期,但仍可以执行。
简而言之,担心其他事情