【问题标题】:Memory management of native heap in CLRCLR 中本机堆的内存管理
【发布时间】:2016-07-15 12:43:43
【问题描述】:

我想了解 CLR 中本机堆的内存管理。我知道 CLR 有管理堆。例如,我正在使用 C++/CLI 绑定库,它演变了一些 C++ 库。在其工作期间,C++ 库可以分配对象。这些对象会在 CLR 的本机堆中分配吗?据我了解,CLR 具有将在 CLR 运行期间创建的本机和托管堆。

【问题讨论】:

  • 您阅读的内容是正确的,但已被简化。对于本机堆,请阅读:msdn.microsoft.com/en-gb/library/windows/desktop/…
  • 基本上,C++ 的new 将调用HeapAlloc。 C++/CLI 的gcnew 将在托管堆上分配。本机堆不以任何方式属于 CLR。​​

标签: c++ .net c++-cli clr


【解决方案1】:

CLR 没有“本机堆”。当您在代码中使用 malloc()new 时,您将使用 C 运行时分配器。与您在本机 C 或 C++ 程序中使用的完全相同。对于 2010 或更低版本的 VS 从其自己的堆(使用 HeapCreate 创建)分配,对于 2012 及更高版本从默认进程堆 (GetProcessHeap) 分配。

根本没有“管理”,你负责调用free()delete,就像你在原生C或C++程序中一样。不这样做会导致内存泄漏,垃圾收集器根本无法帮助您。

【讨论】:

  • 据我了解,库的C运行时会创建自己的堆?
猜你喜欢
  • 1970-01-01
  • 2011-04-25
  • 2012-10-19
  • 2012-01-18
  • 1970-01-01
  • 1970-01-01
  • 2015-09-28
  • 1970-01-01
  • 2011-01-05
相关资源
最近更新 更多