因此,如果您想查看对象的同步块,则在 sos 下,您必须查看对象地址之前的 -4 个字节(在 32 位机器上)。有谁知道返回 4 个字节的智慧是什么?我的意思是他们可以在 0 处有同步块,然后在 +4 处键入句柄,然后在 +8 处键入对象字段。
问问题
156 次
2 回答
1
这是一个实现细节,所以我不能告诉你放置同步块的确切原因。但是,如果您查看共享源 CLI,您会发现运行时对如何分配和使用对象进行了各种优化,实际上与单个实例关联的数据位于多个不同的位置。例如,同步块只是位于别处的结构的索引值。类似地,MethodTable 和 EEClass 存储在别处。这些都是实现细节。IMO 的重点是了解如何在调试期间挖掘所需的信息。理解为什么实现细节是这样的重要性要小得多。
于 2010-10-07T07:18:26.417 回答
0
我会说它符合预期,特别是对于已明确布局的结构。正如布赖恩所说,这只是一个实现细节。它类似于 malloc 的多少实现将分配比请求更多的空间,将分配大小存储在前四个(或八个)字节中,然后返回一个偏移的指针以指向超出该字节的下一个字节。
于 2010-10-07T07:36:06.920 回答