非托管内存和托管内存

问题描述 投票:0回答:2

un-managed
managed memory
到底是什么? 谁能给我简单解释一下?

此外,当托管内存概念被用于 RAM,称为托管 RAM 时,究竟意味着什么。关于“托管 RAM”和“非托管 RAM”的一些细节是什么?

memory ram unmanaged managed
2个回答
70
投票

都是一样的物理内存。区别在于谁在控制它。

Microsoft 的定义是托管内存由垃圾收集器 (GC) 清理,即定期确定物理内存的哪一部分正在使用和未使用的进程。

非托管内存被其他东西清理,例如您的程序或操作系统。

非托管内存这个词有点像第一次世界大战,直到第二次世界大战后才叫那个。以前只是内存。


0
投票

有不同的方面去理解

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
方法调用)。

© www.soinside.com 2019 - 2024. All rights reserved.