【发布时间】:2014-04-10 00:21:55
【问题描述】:
我有一个关于运行时会发生什么的问题。
假设我创建了一个对象。堆栈上有对对象第一个存储在堆中的空间的引用。
DataMembers(int a=10 ....) 存储在对象的空间中。 如果对象的类有虚方法,那么就会有一个 8 字节的 vpointer 指向堆上另一个地址上的 VirtualTable。
假设我只有非静态方法。所以 Object 只存储了一个指向我的类的类型对象的方法表的指针。
我希望我的第一部分是对的 :)
如果我是对的....我想知道当本地构造想要调用我的对象的非静态方法时会发生什么?!以及非静态方法真正存储在哪里?因为存储静态方法的空间必须有所不同(它们存储在调用的类型对象表中......对!?)
我的建议:
我的类的类型对象的方法表具有被调用方法的名称。 此方法在称为堆栈帧的堆栈中获得一些空间。 这个框架存储了 Method 的参数以及一个名为 this 的不可见常量指针。这个指针指向堆上对象的地址。
【问题讨论】:
标签: c#