gpt4 book ai didi

c# - 堆内存管理.Net

转载 作者:太空狗 更新时间:2023-10-29 21:14:10 25 4
gpt4 key购买 nike

当创建 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 个对象:

enter image description here

2 个对象:

enter image description here

最佳答案

为了帮助澄清此处关于堆的讨论,CLR 使用了大约 8 种不同的堆:

  1. Loader Heap:包含 CLR 结构和类型系统
  2. 高频堆:静态、方法表、FieldDescs、接口(interface)映射
  3. 低频堆:EEClass、ClassLoader 和查找表
  4. stub 堆:用于 CAS、COM 包装器、P/Invoke 的 stub
  5. 大型对象堆:需要超过 85k 字节的内存分配
  6. GC 堆:用户分配的应用私有(private)堆内存
  7. JIT 代码堆:由 mscoreee(执行引擎)和 JIT 编译器为托管代码分配的内存
  8. 进程/基堆:互操作/非托管分配、 native 内存等

HTH

关于c# - 堆内存管理.Net,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8479529/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com