没有垃圾收集的.NET的力量?

Phi*_*hil 8 .net c# c++ garbage-collection memory-management

我喜欢C#,因为.NET框架的强大功能使得它很容易为Windows开发.但是我也喜欢标准的C++,主要是因为它让我对内存管理进行了微调.有没有办法让两全其美?是否有可以与.NET框架中丰富的库集竞争的C++库?或者有没有办法手动释放我从未使用过的.NET语言中的内存?或者是否可以在标准C++应用程序中使用.NET dll?我知道,我真的在这里伸展,但我相信魔法.

reu*_*ben 6

你看过Boost了吗?

或者,您可以使用"C++/CLI"(也称为托管C++,又名C++.NET); 用这种语言编写的代码可以调用.NET API,也可以通过HeapAlloc/ 等传统的Win32 API手动管理内存HeapFree.但根据我的经验,这种语言最常用于编写"胶水代码",而不是用于从头开始构建应用程序.

  • (当我需要超过15 char最小值时添加空格:-)) (2认同)

Mar*_*ger 5

如果您确实想要显式访问指针等(来自 MSDN),您还可以在 C# 中“固定”代码段:

unsafe static void TestMethod()
{
  // assume class Point { public int x, y; }
  // pt is a managed variable, subject to garbage collection.
  Point pt = new Point();

  // Using fixed allows the address of pt members to be
  // taken, and "pins" pt so it isn't relocated.

  fixed (int* p = &pt.x)
  {
      *p = 1;
  }        
}
Run Code Online (Sandbox Code Playgroud)

但实际上,我认为你最好确定为什么要自己管理内存——我现在认识的大多数开发人员宁愿专注于系统的实际设计和构建,而不是担心释放内存块。这里还有其他好的建议,例如 Boost(尽管说实话,如果你有木箱鼓来宣布你比 GC 更好,你可能已经知道 Boost)、Qt 和 .NET 桥接(见鬼,如果您愿意,您可以将 CLR 托管在非托管进程中),但我怀疑,对于实际上需要您自己管理内存的少数地方,您最好将它们限制为由 VC++ 项目引用的项目。解决方案的其余部分。