我正在阅读关于OOP的内存管理。我理解调用堆栈以及如何在堆上进行对象实例化。 OS POP和Push如何调用堆栈数据进行注册。如何通过GC线程从堆中收集无法使用的垃圾。 我也理解在虚拟空间上创建的函数指针(委托)如何工作以指向其他函数。
我的问题是当对象被实例化时它是否也在HEAP上存储其类型(类)的方法细节,或者它只是像编译器名称一样在内部被编译器使用?就像int在堆上是4个字节一样,我想知道如何只用4个字节,方法变量也可以存储?
答案 0 :(得分:0)
存储在堆上的每个对象都包含(i)标题块和(ii)数据,在您的情况下为int
。
标题块告诉.NET对象的类型和类型的有效操作,它们是程序存储器中已编译代码的一部分。
如需深入研究,请参阅此处:
http://blogs.microsoft.co.il/sasha/2012/03/15/virtual-method-dispatch-and-object-layout-changes-in-clr-40/