.net - 进程内存v.s. AppDomain 内存分配

标签 .net memory clr appdomain

假设我有 .Net 应用程序 App.exe,它创建了三个域:DomainA、DomainB 和 DomainC。

可以说CLR给App.exe进程分配了一定数量的物理内存,然后这个内存在我们三个域之间按一定比例分配吗?

或者对于每个新域,独立于为 App.exe 和其他域分配的内存分配一个新的单独的内存部分?

简而言之:我可以将逻辑内存分配想象成带有歌曲的(顺序)磁带(其中歌曲是 AppDomans),还是一种 FAT32,其中文件随机定位而我们只知道它们在磁盘上的位置?

最佳答案

Can we say that CLR assigns to App.exe process some amount of physical memory



你不能这么说,Windows 上的进程只分配虚拟内存。虚拟内存到物理内存 (RAM) 的映射严格来说是操作系统的职责。 RAM 需要由机器上运行的所有进程共享,并且是动态完成的。所有进程的虚拟内存分配的总和通常大大超过 RAM 的数量。当进程访问虚拟内存时,页面错误会将虚拟内存页面映射到 RAM。如有必要,RAM 中的数据将被丢弃或存储在分页文件中以腾出空间。

AppDomains 共享一组 GC 堆(第 0 代到第 2 代和大对象堆)并且它们的分配是混合的。它们由根分开,每个 AppDomain 都有自己的静态变量堆、自己的 GCHandles 和自己的带有局部变量的线程堆栈帧集。

关于.net - 进程内存v.s. AppDomain 内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18531263/

相关文章:

c# - 在扩展方法中如何基于实现类创建对象

c# - 将 AsyncCompletedEventHandler 设置为类外的方法

.net - 在没有 .net 支持的 Windows 中创建安装和部署项目

dll - C# CLR 异常 "BadImageFormatException: Could not load file or assembly"

c# - 获取 List<x, y> 的所有元素值

c - 如何为C代码分配更多内存

python - 内存问题 : Should I be writing to file/database if I'm using swap? (Python)

java - 通过 Java 中的键聚合文件中的键值行

.net - 如何判断流编写器是否已关闭?

c# - 是什么允许 .NET 任务在等待 I/O 完成后继续执行?