以下情况之间有什么区别?

时间:2018-10-31 04:38:05

标签: c# memory mapping

代码在C#中

案例1

var p = new Person();
p = getPerson(p); 

案例2

var p = new Person();
getPerson(p);

在上述情况下,是否会消耗额外的内存?

1 个答案:

答案 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          

OpCodes.Stloc Field

  

从评估堆栈的顶部弹出当前值并存储   将其放在指定索引处的本地变量列表中。

OpCodes.Nop Field

  

如果修补了操作码,则填充空格。没有有意义的操作   尽管可以消耗处理周期,但仍可以执行。


简而言之,担心其他事情