c# - 分配非托管资源的位置

标签 c# garbage-collection

我不是计算机科学专业的人。托管资源分配在堆上。但我想知道非托管资源分配在哪里。如果非托管资源也分配在堆上,它是托管资源使用的同一个堆还是不同的堆?

提前致谢。

戒色

最佳答案

从操作系统的角度来看,堆本质上是一样的:分配给操作系统进程的内存空间。

不同之处在于,当 CLR(.net VM)在 Windows 进程中加载​​时,它会占用该堆的一部分并将其转变为托管堆。此内存空间成为分配所有托管资源并为垃圾收集器所知的地方。

例如,如果您分配了一大块非托管内存并用完了托管堆的空间,您可能会遇到内存不足错误。或者反过来。

Jeffrey Richter 是更好地解释这些东西的人。我强烈推荐阅读他的解释:

您可以使用 System.InteropServices 命名空间的服务,Marshal特别是类,用于在堆的非托管部分和托管部分之间复制数据。

关于c# - 分配非托管资源的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2855210/

相关文章:

c# - 如何使用 WPF MediaKit 或类似程序将使用 DES 创建的 DirectShow 筛选器图渲染到 WPF 控件上?

C# - 无法在 LINQ to Entities 查询中构造实体或复杂类型

c# - 这两种异步方法有什么区别?

c# - WPF MVVM 触发代码基于 Tab SelectedValue,而不是 SelectedIndex

garbage-collection - 如何确保未使用的累加器的垃圾收集?

java - 如何在 Android 上管理位图的内存?

c# - 如何将参数传递给待解析类型的 'child' 项的构造函数

java - Mule3.2 重负载下 GC 频率过高

c# - 单体机器人 : Performing a full GC

c# - 长时间运行的进程暂停