托管和非托管堆

WPF*_*-it 5 .net heap unmanaged

什么是非托管堆?

我认为CLR管理的任何基于对象的内存都是托管堆,那么为什么我们要讨论一个非托管堆呢?

Jon*_*eet 10

想象一下,您使用P/Invoke调用Win32函数,并使用分配一些内存malloc.垃圾收集器没有该内存的可见性 - 它是不受管理的.

当然,这可能是也可能不是你听过这个词的背景 - 如果你能指出我们的一些例子,我们可以帮助你更多.

  • @ user164184:我不会说有*没有非托管堆 - 更多我们不需要担心它.毫无疑问,CLR本身将使用非托管数据结构. (2认同)

Sch*_*Cat 5

根据John Skeet - managed堆是.net将为您管理的堆,所有标准对象都是在其上创建的,您通常不需要过多考虑因为它是受管理的.

unmanaged 意味着您个人正在分配内存,因此您个人有责任解除分配,自行管理,并跟踪正在使用的内容.

所以,是的,对象内存(在正常对象创建和破坏的意义上,从对象派生的东西)被管理.这是你需要担心的其他东西 - 为它们分配的非对象和内存.