如何在创建实例时在系统中分配非托管内存?

时间:2011-04-29 09:37:46

标签: c# .net memory-management unmanaged-memory

当从C#创建COM对象或任何其他非托管实例时,系统中如何分配非托管内存?

2 个答案:

答案 0 :(得分:6)

CLR为要实例化的COM对象创建一个Runtime Callable Wrapper(RCW)。这是从.NET到COM系统的一种互操作代理。因此,您创建的COM对象被分配,并在CLR中创建对它的引用,这将它放在堆上。

您必须始终在包含对RCW的引用的类中实现IDisposable,因为它们不会自动清理(包装器在.NET堆上,但COM对象本身不是)。在包装器上调用Dispose()会释放COM对象。因此,未实现IDisposable会导致内存泄漏。

答案 1 :(得分:0)

我的猜测是他们调用操作系统在非托管堆上创建内存。 CLR显然与他们无关,因为他们没有管理。