2010-10-05 26 views
0

所以如果你想看一个对象的同步块,在sos下你必须在对象地址之前查看-4字节(在32位机器上)。有谁知道返回4字节的智慧是什么?我的意思是他们可以在0处有同步块,然后在+4处输入句柄,然后在+8处输入对象字段。为什么syncblk位于-4而不是0?

+0

我明白了,你可以看到我对这个论坛太新了。我已经将其中一些标记为回答(希望没有任何错误)。感谢大家指出它,非常感谢 – imak 2010-10-06 12:59:14

+0

不客气。 – 2010-10-06 13:07:25

回答

1

这是一个实现细节,所以我不能给你提供同步块放置的确切原因。但是,如果您查看共享源CLI,则会看到运行时对对象的分配和使用方式进行了各种优化,实际上与单个实例关联的数据位于几个不同的位置。同步块例如只是位于别处的结构的索引值。同样,MethodTable和EEClass存储在别处。这些都是实现细节。 IMO的重要一点是了解如何挖掘调试过程中所需的信息。理解为什么实现细节保持原样并不重要。

+0

@Brain,我明白它的实现细节,但我也知道GC团队心中的表现非常接近和亲近。我只是好奇,为什么这个设计被选中,而syncBlock从0开始。 – imak 2010-10-07 13:44:30

0

我想说它符合期望值,特别是对于结构为explicitly laid out的结构。正如Brian所说,这只是一个实现细节。这与malloc的多少实现将分配比请求更多的空间相似,将分配大小存储在前四(或八个)字节中,然后返回一个偏移指针指向下一个字节。

相关问题