托管代码、非托管代码和本机代码有什么区别?

问题描述 投票:0回答:3

非托管代码与本机代码相同吗?有什么区别?


重复:本机代码和托管代码之间的区别?

.net c++-cli
3个回答
5
投票

托管代码是在虚拟机下运行的代码,换句话说,其内存由另一个程序(例如 C#)“管理”。

非托管代码运行在底层架构上,不需要虚拟机,但可能需要运行时库。 (以C为例)

进一步阅读:http://en.wikipedia.org/wiki/Managed_code

哎呀,这是一个重复


0
投票

托管代码由 .NET 运行时运行。因此,CLR 处理内存管理(也称为垃圾收集)等事务。托管二进制文件采用 IL 代码。该代码不能直接被 CPU 理解,而是由 CLR 为 CPU 解释。任何具有 CLR 的环境都可以运行托管程序集。

非托管代码只是定期编译的代码。 CPU直接理解的一系列ASM指令。运行速度更快,但支持框架较少,并且天生仅限于一组可能运行的特定 CPU。


-1
投票

有一天我听到一个相当不错的故事。如果原来的人过来看到这个,那么我会相信他。我不确定他是否希望我放弃他的名字。

非托管代码: 想象一下一些真正被撕裂的卑鄙战士。他们拥有完全的自由统治权。他们可以做任何他们想做的事,去任何他们需要去的地方。唯一的问题是它们随地便便。它们会把整个地方拉屎,还会拉到不该拉屎的地方。这是 C/C++ 等。

托管代码: 这些人都是远房亲戚。更加精致。但并不那么健康和刻薄。事实上,它们的体重略有超标。他们不被允许跑到任何他们想去的地方。事实上,有一个边界将它们限制在小围栏中。它们也会大便,但它们是尿布,所以它们不会把大便弄得到处都是。通常会有一个小家伙过来清理他们的尿布。这是Java。

大便显然是记忆。边界是虚拟机。小家伙是垃圾收集器。

我只是不记得可移植性功能是如何融入这个故事的。

© www.soinside.com 2019 - 2024. All rights reserved.