首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >本机代码和托管代码之间的区别?

本机代码和托管代码之间的区别?
EN

Stack Overflow用户
提问于 2009-05-13 02:14:13
回答 4查看 71.9K关注 0票数 63

例如,在查看GlowCode profiler网站时,它会显示:

GlowCode 6.2和x64配置文件本机、托管和混合的C++、C#、.NET代码

它们是什么意思?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-05-13 02:23:01

本机代码是内存不是“托管”的代码,例如,内存不会为您释放(例如,C++的delete和C的reference ),没有引用计数,没有垃圾回收。你猜对了,托管代码是一种代码,它的内存是空闲的,并为你分配了垃圾回收和其他好处。

混合代码是指调用非托管层的托管代码。通常,当您有一个纯非托管invoke动态链接库并使用P/ C++从.NET调用它时。

票数 89
EN

Stack Overflow用户

发布于 2009-05-13 02:33:42

本机代码经过编译,可直接与操作系统协同工作。但是,托管代码是预编译的(Java语言中的字节码),然后由即时编译器在运行时将其处理为本机代码。托管代码有一个有趣的副作用,即有可能在不同的操作系统上运行,因为机器代码直到VM实际使用它时才会创建。这样,你就可以在Windows上运行.NET应用程序,也可以在安装了Mono运行时的Linux或Mac上运行它们。可移植性目前不像Java那样干净(因为Microsoft的自然封闭体系结构),但概念仍然存在。

如果您正在运行非托管应用程序,则代码已编译为在指定的操作系统/硬件上运行。任何到另一个操作系统/指令集的可移植性都会丢失,必须重新编译才能执行。

票数 54
EN

Stack Overflow用户

发布于 2009-05-13 22:27:29

本机代码是用运行它的计算机的“本机”机器语言编写的,并由处理器直接执行。

托管代码是用一种特殊的语言编写的,需要另一个程序来运行(即管理)它。另一个程序通常被称为解释器,因为它解释特殊的语言。

C和C++程序都是原生的。

Java和C# (以及所有的.NET语言)都是托管的。

托管C++是在.NET解释器中运行的C++的一种特殊形式。

混合程序是使用本机代码和托管代码的程序。

票数 40
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/855756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档