【发布时间】:2009-08-12 15:38:02
【问题描述】:
对象的可执行代码是为所有实例存储一次还是为每个实例存储一次?
换句话说,一个对象的代码是存储一次并重复使用,还是每个实例都有自己的副本?
【问题讨论】:
标签: .net clr memory-management
对象的可执行代码是为所有实例存储一次还是为每个实例存储一次?
换句话说,一个对象的代码是存储一次并重复使用,还是每个实例都有自己的副本?
【问题讨论】:
标签: .net clr memory-management
代码是共享的,静态数据也是。
只有类中特定于实例的部分是分开的。
【讨论】:
这里有更多细节,取自http://msdn.microsoft.com/en-us/magazine/cc188793.aspx
“每当在堆中创建一个对象时,每个对象都会获得两个与之关联的额外开销字段。第一个开销字段 MethodTablePointer 包含类型方法表的内存地址。基本上,这个指针可以获取堆中任意对象的类型信息,其实在内部调用System.Object的GetType方法时,该方法是根据对象的MethodTablePointer字段来判断对象是什么类型。”
因此,您的实例不会复制任何此类共享类型数据/代码。相反,它有一个指向它的指针。
【讨论】: