什么是非托管堆?
我认为CLR管理的任何基于对象的内存都是托管堆,那么为什么我们要谈论非托管堆呢?
发布于 2011-07-08 16:12:40
假设您使用P/Invoke调用一个Win32函数,该函数使用malloc分配一些内存。垃圾收集器无法看到该内存-它是非托管的。
当然,这可能是你听说过这个术语的背景,也可能不是--如果你能给我们举一些例子,我们可能会给你更多帮助。
发布于 2011-07-08 16:19:15
根据John Skeet的说法- managed堆是.net将为您管理的堆,所有标准对象都是在其上创建的,您通常不需要过多操心它,因为它是托管的。
unmanaged意味着您个人分配内存,因此您个人负责释放它,自己管理它,并跟踪正在使用的内存。
所以,是的,对象内存(在正常的对象创建和销毁的意义上,从对象派生的东西)是受管理的。这是你需要担心的另一个东西--非对象和为它们分配的内存。
发布于 2016-02-17 14:39:38
为了理解.net中的非托管堆,我们需要了解托管堆是什么。
在.net框架中,我们有垃圾收集器,它是由公共语言routine.During初始化的,它的初始化垃圾收集器分配一段内存来存储和管理由托管代码实例化的对象,.This内存被称为托管堆,而不是操作系统中的本机堆。
非托管堆是由非托管代码/本机代码在运行时用于分配内存的堆。time.This堆不受垃圾收集器的控制,需要由开发人员处理以释放分配的内存。Difference between "managed" and "unmanaged"
https://stackoverflow.com/questions/6621716
复制相似问题