我只是想知道托管语言相对于本机代码的真正优势是什么
可移植性: C#/Jave 需要每个平台都有一个 VM 实现,c++ 必须有一个编译器
垃圾收集器: 我们可以在 C++ 中有一个线程来检查内存分配/释放
反思:也许我们可以有一个与本机代码相似的机制(???)
今天托管代码已经获得了很大的普及,但是本机代码的优势通常是更高效,更轻巧,即:目标平台上没有VM。另一方面,据我所知,优势在于托管代码不是很大,我错了吗?托管代码是大多数应用程序遵循的好方法吗?
我只是想知道托管语言相对于本机代码的真正优势是什么
可移植性: C#/Jave 需要每个平台都有一个 VM 实现,c++ 必须有一个编译器
垃圾收集器: 我们可以在 C++ 中有一个线程来检查内存分配/释放
反思:也许我们可以有一个与本机代码相似的机制(???)
今天托管代码已经获得了很大的普及,但是本机代码的优势通常是更高效,更轻巧,即:目标平台上没有VM。另一方面,据我所知,优势在于托管代码不是很大,我错了吗?托管代码是大多数应用程序遵循的好方法吗?
您关于可移植性的声明:
C#/Jave 需要每个平台都有一个 VM 实现,c++ 必须有一个编译器
不完全正确,或明显正确 - C#、VB.NET、Java 等需要编译一次为 IL、字节码等,但 C++ 需要针对每个平台编译为不同的版本,这也可能需要更改在使用的 DLL(如果有)或管理内存的方法中。
至于垃圾收集,我对在 C++ 中的线程上执行此操作知之甚少。但在托管代码中,您无需做任何工作即可拥有垃圾收集器。它已经在那里了。此外,在托管语言中,您倾向于编写更少的代码来完成您需要做的事情,这在清晰度方面具有巨大的优势。(我发现在设计应用程序的 UI 时尤其如此。)此外,可以使用托管代码执行实时进行优化,并且可以对引擎进行更新以使其更好。
托管代码和非托管代码都有几个优点,最后,这取决于您在做什么。我认为大型项目更适合托管代码,需要速度的部分可以使用非托管代码完成。毕竟,非托管库可以在托管代码中使用,反之亦然。
所以,在我看来,是的,你错了。不过,这是一个有点主观的问题。
托管代码是大多数应用程序的最佳方式。原因是它实现起来更快,单元测试更简单,维护也更容易。
当然,有些应用程序并非如此。必须快速的应用程序或需要对硬件进行特殊访问的应用程序可能应该是本机应用程序。是的,您可以使用本机代码在托管应用程序中重新实现提供给您的服务,但您为什么要这样做?