当创建 2 个相同类型的对象时,堆栈内存中的句柄会指向堆中的同一个对象还是会指向 2 个不同的对象。为了清楚起见,这里是具体问题......
class Q2 {
private static int num = 0;
private String prefix;
public Q2 (String p)
{ prefix = p; }
public String Msg (String str) {
String n;
num++;
n = num.ToString();
return n + " - " + prefix + str;
}
}
使用适当的图表,描述执行完以下所有语句后的内存状态。
Q2 var1, var2;
var1 = new Q2("Question 2");
var2 = new Q2 ("Another view");
以下是我无法决定的答案:
1 个对象:
2 个对象:
最佳答案
为了帮助澄清此处关于堆的讨论,CLR 使用了大约 8 种不同的堆:
- Loader Heap:包含 CLR 结构和类型系统
- 高频堆:静态、方法表、FieldDescs、接口(interface)映射
- 低频堆:EEClass、ClassLoader 和查找表
- stub 堆:用于 CAS、COM 包装器、P/Invoke 的 stub
- 大型对象堆:需要超过 85k 字节的内存分配
- GC 堆:用户分配的应用私有(private)堆内存
- JIT 代码堆:由 mscoreee(执行引擎)和 JIT 编译器为托管代码分配的内存
- 进程/基堆:互操作/非托管分配、 native 内存等
HTH
关于c# - 堆内存管理.Net,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8479529/