un-managed
和managed memory
到底是什么?
谁能给我简单解释一下?
此外,当托管内存概念被用于 RAM,称为托管 RAM 时,究竟意味着什么。关于“托管 RAM”和“非托管 RAM”的一些细节是什么?
都是一样的物理内存。区别在于谁在控制它。
Microsoft 的定义是托管内存由垃圾收集器 (GC) 清理,即定期确定物理内存的哪一部分正在使用和未使用的进程。
非托管内存被其他东西清理,例如您的程序或操作系统。
非托管内存这个词有点像第一次世界大战,直到第二次世界大战后才叫那个。以前只是内存。
有不同的方面去理解
unmanaged memory
.
在更高级别,您运行的应用程序可以分为两类:
unmanaged code
和managed code
。 managed code
由 runtime
管理,如 .Net 和 Java。运行时提供重要的功能,如自动内存管理(通过垃圾收集器)。 unmanaged code
是运行 c/c++ 程序的方式。开发人员全权负责管理程序的所有内容,包括内存部分(通过 malloc
和 free
等 API)。
在更底层更具体的层面,比如.Net世界,内存管理也可以分为
managed
和unmanaged
两部分。这其实就是令人困惑的地方。因为如上所述,.Net 的运行时提供了可以自动处理内存分配和释放的 GC。为什么还有unmanaged
记忆?这里的关键点是unmanaged
部分不是内存本身,而是绑定到内存的底层资源。通常,这些是操作系统级资源,如 file
、network connection
和 database connection
。 GC 可以收集内存,但它不知道如何处理这些底层系统级资源。所以在某种程度上,它不受运行时的控制。然后开发人员需要做一些事情来帮助运行时正确处理这种情况(例如,.Net 世界中的Dispose
方法调用)。