分配非托管资源的地方

Har*_*sha 5 c# garbage-collection

我不是一个科学家.托管资源在堆上分配.但我想知道在哪里分配了非托管资源.如果还在堆上分配了非托管资源,它是否与托管资源使用的堆相同或不同?

提前致谢.

Ser*_*sta 10

从操作系统视图来讲,堆本质上是相同的:分配给OS进程的内存空间.

不同之处在于,当CLR(.net VM)加载到Windows进程中时,它会占用此堆的一部分并将其转换为托管堆.此内存空间成为分配所有受管资源并为垃圾回收器所知的位置.

例如,如果分配了大量非托管内存并且托管堆空间不足,则可能会遇到Out of Memory错误.或者相反.

杰弗里里希特是更好地解释这个东西的人.我强烈建议阅读他的解释:

您可以使用System.InteropServices命名空间(特别是Marshal类)的服务来在堆的非托管部分和托管之间复制数据.