【发布时间】:2020-02-11 10:16:28
【问题描述】:
我想知道这个类(它的对象)的内存布局是怎样的:
class MyClass
{
string myString;
int myInt;
public MyClass(string str, int i)
{
myString = str;
myInt = i;
}
}
MyClass obj = new MyClass("hello", 42);
谁能想象一下?
更新:
根据 Olivier Rogier 的回答以及 ckuri 和 Jon Skeet 的 cmets,我试图提出一个高级图表,深受 ckuri 提到的 devblog article 的影响。
据我了解:
obj(8 字节引用)指向包括元数据的对象(实际上不是指向它的开头,但为了简单起见我们忽略它)。在此存储
myInt和myString引用值(这是对真实字符串值的引用)
我不想深入到最后的细节,但我仍然好奇的是:
如果要访问
obj.myString,是否需要两次“查找”,例如首先查找obj,然后跟随它并查找myString或者是否有类似全局地址表的东西,其中直接存储了obj.myString的地址?obj的参考值存储在哪里?它是program对象块的一部分吗,例如myString是obj对象块的一部分? (假设obj是在program实例中创建的)
【问题讨论】:
-
我很困惑你在问什么
-
第二个问题编号为 (1) 中的“应访问”是什么意思?你能举一个“访问”的例子吗?我也不明白你所说的“全局地址表”是什么意思。
-
另外,了解您提出这些问题的目的也会有所帮助;绝大多数 C# 开发人员永远不必担心这些东西。您想在这里解决一些更深层次的问题吗?如果是这样,请说出问题所在,我们可以帮助您直接解决问题。
-
另外,您的图表没有正确显示字符串对象的结构,这比您在此处显示的要复杂得多;你在乎吗?