.NET对象可执行指令内存消耗?

时间:2009-08-12 15:38:03

标签: .net clr memory-management

对象的可执行代码是为所有实例存储一次还是为每个实例存储一次?

换句话说,对象的代码是存储一次并重复使用,还是每个实例都有自己的副本?

2 个答案:

答案 0 :(得分:2)

代码是共享的,静态数据也是如此。

只有特定于实例的类的部分才会保持独立。

答案 1 :(得分:2)

这里有一些细节,取自http://msdn.microsoft.com/en-us/magazine/cc188793.aspx

“每当在堆中创建一个对象时,每个对象都会获得两个与之关联的额外开销字段。第一个开销字段MethodTablePointer包含该类型方法表的内存地址。基本上,这个指针使得获取有关堆中任何对象的类型信息。实际上,当您在内部调用System.Object的GetType方法时,此方法将跟随对象的MethodTablePointer字段以确定该对象的类型。“

因此,您的实例不会复制任何此类共享类型的数据/代码。相反,它有一个指向它的指针。