代码在C#中
案例1
var p = new Person();
p = getPerson(p);
情况2
var p = new Person();
getPerson(p);
在上述情况下,任何情况下都会消耗额外的内存吗?
假设getPerson
只是修改Person
的属性,并且有两种不同的方法——一种是返回一个人,另一种是无效的,则该代码中没有明显的差异
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
OpCodes.Stloc字段
从评估堆栈的顶部弹出当前值并存储它位于指定索引的局部变量列表中。
OpCodes.Nop字段
如果修补了操作码,则填充空间。没有任何有意义的操作尽管处理周期可能被消耗,但是执行。
简而言之,担心的其他事情