【问题标题】:.NET Object Executable Instructions Memory Consumption?.NET 对象可执行指令内存消耗?
【发布时间】:2009-08-12 15:38:02
【问题描述】:

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

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

【问题讨论】:

    标签: .net clr memory-management


    【解决方案1】:

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

    只有类中特定于实例的部分是分开的。

    【讨论】:

    • 我想知道,这个词中是否有任何面向对象的框架/语言不是这样的? :)
    【解决方案2】:

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

    “每当在堆中创建一个对象时,每个对象都会获得两个与之关联的额外开销字段。第一个开销字段 MethodTablePointer 包含类型方法表的内存地址。基本上,这个指针可以获取堆中任意对象的类型信息,其实在内部调用System.Object的GetType方法时,该方法是根据对象的MethodTablePointer字段来判断对象是什么类型。”

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

    【讨论】:

      猜你喜欢
      • 2016-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-13
      • 2017-10-07
      • 2020-02-12
      相关资源
      最近更新 更多