来自CLR的newobj指令

时间:2012-02-12 10:40:28

标签: .net garbage-collection

Andrew Troelsen 在他的书Pro C# 2008 and the .NET 3.5 Platform, Fourth Edition中说了解CLR newobj指令 248,第一个第三个子弹

  

在将引用返回给调用者之前,将下一个对象指针前进以指向托管堆上的下一个可用插槽

听起来推进下一个对象指针是一个lock块(或类似的东西),以确保在所有.net上在托管堆上创建每个对象后,此指针正确递增线程。我是对还是完全错了?

1 个答案:

答案 0 :(得分:2)

首先,这是一个实现细节。有很多方法可以实现这一点,CLR实现可以随意选择。

一些可能的实施:

  1. 按照建议使用锁定
  2. 使用Interlocked.Exchange
  3. 等“无锁”方法
  4. 从每个帖子的不同区域分配。例如,每个线程有一个单独的Gen0堆。