所以如果你想看一个对象的同步块,在sos下你必须在对象地址之前查看-4字节(在32位机器上)。有谁知道返回4字节的智慧是什么?我的意思是他们可以在0处有同步块,然后在+4处输入句柄,然后在+8处输入对象字段。为什么syncblk位于-4而不是0?
0
A
回答
1
这是一个实现细节,所以我不能给你提供同步块放置的确切原因。但是,如果您查看共享源CLI,则会看到运行时对对象的分配和使用方式进行了各种优化,实际上与单个实例关联的数据位于几个不同的位置。同步块例如只是位于别处的结构的索引值。同样,MethodTable和EEClass存储在别处。这些都是实现细节。 IMO的重要一点是了解如何挖掘调试过程中所需的信息。理解为什么实现细节保持原样并不重要。
+0
@Brain,我明白它的实现细节,但我也知道GC团队心中的表现非常接近和亲近。我只是好奇,为什么这个设计被选中,而syncBlock从0开始。 – imak 2010-10-07 13:44:30
0
我想说它符合期望值,特别是对于结构为explicitly laid out的结构。正如Brian所说,这只是一个实现细节。这与malloc的多少实现将分配比请求更多的空间相似,将分配大小存储在前四(或八个)字节中,然后返回一个偏移指针指向下一个字节。
相关问题
- 1. 为什么32位等于4Giga字节而不是4吉位
- 2. 为什么对于[0]而不是-1输出为0?
- 3. 为什么retainCount是0而不是1?
- 4. 为什么main()函数的argc在ESP + 4而不是ESP + 0?
- 5. 'num_of_cmt'是4而不是2。为什么?
- 6. 为什么返回-1而不是0?
- 7. 为什么选择0,...,而不是SELECT
- 8. 为什么使用`javascript:void(0)`而不是`javascript:`作为href做什么占位符?
- 9. 为什么在32位限制上2 GB而不是4 GB?
- 10. iframe内容不是0而是0,为什么?
- 11. 为什么65.6 * 100%10等于9,而不是PHP中的0?
- 12. 为什么x - = x + 4返回-4而不是4
- 13. 为什么使用str.chatAt(0)而不是str [0]进行优化?
- 14. 为什么〜0 >> 1不移位?
- 15. 为什么答案是0而不是0.009?
- 16. 为什么stdout.channel.recv_exit_status的返回值是'7'而不是'0'
- 17. 为什么第一个循环结果为0而不是1?
- 18. 流为什么使用Seek(0L,SeekOrigin.Begin)而不是位置= 0或反之亦然
- 19. 为什么tm_sec在time.h中的范围是0-60而不是0-59?
- 20. 为什么此组件产量为24而不是4?
- 21. 为什么0.ToString(“#。##”)返回空字符串而不是0.00或至少为0?
- 22. 为什么UIView alpha动画从1变为0而不是0到1?
- 23. 为什么0.1 * 10-1不等于0?
- 24. NSUInteger小于0,为什么?
- 25. 为什么=而不是:?
- 26. 为什么kafka是基于pull而不是基于push的?
- 27. 在JavaScript中,0 === 4是什么意思?
- 28. 4 * 0的结果是什么:g_range [2]?
- 29. Bootstrap 4中什么是class =“mb-0”?
- 30. 为什么4位可以存储0-15范围内的值?
我明白了,你可以看到我对这个论坛太新了。我已经将其中一些标记为回答(希望没有任何错误)。感谢大家指出它,非常感谢 – imak 2010-10-06 12:59:14
不客气。 – 2010-10-06 13:07:25