以下情况有什么区别



代码在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字段

如果修补了操作码,则填充空间。没有任何有意义的操作尽管处理周期可能被消耗,但是执行。


简而言之,担心的其他事情

最新更新