【发布时间】:2010-11-29 09:20:33
【问题描述】:
我喜欢 C#,因为 .NET 框架的强大功能使得在 Windows 上进行开发非常容易。不过,我也喜欢标准 C++,主要是因为它让我可以对内存管理进行微调控制。有没有两全其美的方法?是否有 C++ 库可以与 .NET 框架中丰富的库竞争?或者有没有办法以我从未使用过的一种 .NET 语言手动释放内存?或者是否可以在标准 C++ 应用程序中使用 .NET dll?我知道,我真的在这里伸展,但我相信魔法。
【问题讨论】:
-
我认为你追求的是错误的目标。所有 .NET 库都依赖于 GC,因此对于内存,您将无法真正摆脱它。我建议您学习 C# 惯用的方法来为内存以外的任何东西实现 RAII 技术(IDisposable,使用)。 C# 是一种强大的语言。
-
您还没有真正解释为什么要放弃 GC - 我想我们大多数人都会说 GC 是一件好的事情。
-
C++ 的一个优点是,当你释放一些内存时,你知道它已经消失了,如果有东西试图再次访问该内存,就会发生明显的错误。使用垃圾收集器,一个对象可能根本不会被释放,因为一些其他未知对象正在引用它,从而导致微妙的内存泄漏而没有任何错误。所以在这种情况下,实际上可能更难调试内存泄漏,因为垃圾收集器有点太聪明了。
-
@Phil:你说在 C++ 中,“当你释放一些内存时......如果有东西试图再次访问该内存,就会发生明显的错误。”我不相信这是真的:释放后使用不是未定义的行为吗?对于手动管理的内存,我也可以想出很多方法来解决细微的错误,其中大多数会带来比内存泄漏更糟糕的后果。
标签: c# .net c++ memory-management garbage-collection