我想了解 CLR 中 native 堆的内存管理。我知道 CLR 管理堆。例如,我正在使用 C++/CLI 绑定(bind)库,它发展了一些 C++ 库。在其工作期间,C++ 库可以分配对象。这些对象会在 CLR 的 native 堆上分配吗?据我了解,CLR 具有 native 堆和托管堆,它们将在 CLR 运行期间创建。
最佳答案
CLR 没有“ native 堆”。当您在代码中使用 malloc()
或 new
时,您就使用了 C 运行时分配器。与您在 native C 或 C++ 程序中使用的完全相同。对于 VS 版本 2010 或更低版本,它从其自己的堆(使用 HeapCreate 创建)分配,对于 2012 及更高版本,它从默认进程堆(GetProcessHeap)分配。
根本没有“管理”,你负责调用free()
或delete
,就像你在原生C或C++程序中一样。如果不这样做会导致内存泄漏,垃圾收集器根本帮不了你。
关于c++ - CLR中 native 堆的内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38396448/