在堆上分配的对象
回答
类型对象指针用于表示对象的类型。这是必需的:
- 方法查找(虚函数表)
- 检查蒙上
- 寻找
Type
对象,如果你调用GetType
。
同步块字段主要用于锁定。它只在需要的时候才被填充,并且当锁总是无争议的时候,CLR使用不需要任何外部数据的“瘦”锁。否则,它是一个进程范围表中的条目 - 我不知道表中内容的细节,但我可以想象它是等待对象监视器的线程列表。当然,最重要的信息是锁是否被当前持有,通过哪个线程以及它的数量是多少(由于.NET锁的重入特性)。
如果您拨打GetHashCode()
并且没有被覆盖,同步块也会被填入 - 基本上它使用进程范围表来分配一个稳定的数字。 (该对象的地址不够好,因为它可能会随时间而改变。)
不知道关于GetHashCode和同步块......你有更多的信息吗?我发现这个http://blogs.msdn.com/brada/archive/2003/09/30/50396.aspx,但它似乎只是.NET 1.0/1.1 ... – thecoop 2009-10-27 13:38:20
@thecoop:我没有任何其他参考手,虽然我希望它通过C#在CLR中提到。 – 2009-10-27 14:10:40
我相信同步块也用于存储COM互操作元数据和AppDomainID(就像@JonSkeet所说的,它是“_process-wide_表”中的一个条目)。 – Sindhudweep 2013-05-17 17:57:51
同步块索引在Monitor类的引擎下使用,因此lock语句也是如此。
同步块索引的某些位也被GC用来将对象标记为垃圾,以防它不再被引用。
- 1. 堆栈或堆上的对象分配
- 2. 堆分配的对象是否将其成员分配到堆栈上?
- 3. 将堆分配对象上的数据成员分配到堆还是堆栈上?
- 4. 内嵌在堆栈上的对象分配
- 5. 基于C++堆栈的对象分配
- 6. 在执行时,android.opengl.Matrix操作是否在堆上分配对象?
- 7. 性能差B在C + +/w的堆中分配对象和堆栈分配的对象
- 8. 编译器可以在堆上为对象分配内存
- 9. 在非托管堆上分配ref类对象
- 10. C++ - 如何防止对象在堆栈上分配?
- 11. 堆上的对象
- 12. 堆/堆栈上的类成员分配?
- 13. 在堆上分配和分片
- 14. 预分配存储器的栈上的对象,而然后在堆中JAVA
- 15. 在Box2D上分配纹理对象
- 16. 在堆上分配的内存大小
- 17. 堆栈/堆上的对象创建?
- 18. 分配对象时分配
- 19. 对象分配
- 20. 为什么Qt需要在堆中分配子对象?
- 21. 在大对象堆内存中预分配一些内存
- 22. Go在堆栈分配方面被认为是“小”对象?
- 23. 当函数内部静态构造对象时,它会分配在堆上还是堆栈上?
- 24. 垃圾收集语言是否可以在堆栈上分配内联对象?
- 25. iphone上的对象分配仪器
- 26. C++堆栈分配的对象分配和析构函数调用
- 27. 堆上的对象的成员变量是否也自动堆在堆上?
- 28. 在VB6中分配对象
- 29. C++使用对象上堆
- 30. WrapperPointer类和C++堆栈分配的对象
鉴于所有的对象都是特定的类型,除非它在某处记录类型,否则运行时应该知道的是?不要担心阅读那些东西,担心你自己的代码。 – 2009-10-27 07:30:06
@mP确切地说 - 为什么它没有为价值类型记录这些信息?知道你的工具如何工作总是值得的。 – TarkaDaal 2012-11-27 09:21:55