3

这个问题是关于 .NET 的,但我认为它普遍适用。当实例化一个新对象时,该对象中的函数是否也分配了内存?即使他们直到稍后才被调用?

换句话说,两个具有相同成员变量但其中一个包含更多方法的类在实例化时会占用更多内存吗?

4

4 回答 4

9

对象实例表示您分配的实例的状态。因此它保存了您在相应类型中定义的所有字段和属性的副本。

您为给定类型定义的方法保留在实例本身之外的另一个数据结构中,称为Method Table。您分配的每个实例都有一个指向其类型的Method Table的指针。

在此处输入图像描述

当您在该方法上调用函数时,它会移动其指针所需的地址数量,拉取函数,将内存中所有可用参数压入堆栈,然后调用该函数。

更多信息可以在这里阅读:深入了解 .NET Framework 内部结构以了解 CLR 如何创建运行时对象

于 2013-07-18T07:04:44.910 回答
4

具有相同的成员变量但其中包含更多方法的一个在实例化时占用更多内存?

否。实例所需的空间仅取决于字段。

这些方法也需要内存,但每个类只需要一次。像静态字段。该内存是在加载类时分配的。

于 2013-07-18T07:13:44.110 回答
3

内存仅分配给属性而不是方法(实例的)。为方法的元数据及其代码分配了一小部分内存。

于 2013-07-18T07:01:28.500 回答
1

当您创建一个类的新实例时,将为该实例及其所有成员(如类中定义)分配内存。就您的问题而言,仅在调用方法本身时才分配方法(函数)局部变量。

您可以在此处查看对象创建的确切详细信息

于 2013-07-18T07:01:05.027 回答