.net - .net 堆内存的架构

标签 .net memory-management

当我们谈论 Windows 内存架构时 => 我们谈论的是虚拟内存管理器,它将内存块“提供”给应用程序管理器堆,应用程序管理器堆分配应用程序请求的内存大小。

( http://msdn.microsoft.com/en-us/library/ms810466.aspx )

但在 .net 中 => 是 .net 托管堆正在从虚拟内存管理器“询问”内存(我几乎可以肯定是这种情况)还是 .net 托管堆和虚拟内存之间存在某个层内存管理器?

(本题与GC无关)

最佳答案

.NET 运行时基本上充当托管堆的内存管理器。因此,每次你新建一个对象时,它要么将 gen0 GC 堆上的指针前移(这可能会触发一次收集),要么在大对象堆上分配一个 chuck。后者类似于常规 CRT 堆,因为它使用空闲列表。

GC 堆本身存储在根据需要分配/释放给操作系统的段中。这意味着托管内存使用情况通常不会立即反射(reflect)在进程级别。

可以通过WinDbg加载的SOS调试器扩展查看托管堆是如何从不同的段构建的(它也可以在VS中加载,但如果你问我体验有点粗糙)。

我想到了两本书:CLR via C#Shared Source CLI .他们都在一定程度上涵盖了这一点。

关于.net - .net 堆内存的架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10557369/

相关文章:

.net - 子事件的自定义事件设置参数

.net - 从 VB.NET 中的另一个类/线程访问 TextBox 控件时出现问题

c# - 维护内存的可重用列表

memory-management - 分配后TLAB分配的对象是否共享?

c# - [Serializable] 是否适用于继承的类?

c# - 如何检查 RavenDB 中是否存在表(实体)

Android 2.3 的 VM 预算低于 2.1 和 2.2?

c++ - 呈现 QWidgets 时出现大量页面错误

用于减少内存的 Java 整数标志和按位运算

.net - .NET 4 中的新 HandleProcessCorruptedStateExceptions 属性