区别:托管代码与非托管代码

区别:托管代码与非托管代码托管代码托管代码 ManagedCode 实际上就是中间语言 IL 代码 代码编写完毕后进行编译 此时编译器把代码编译成中间语言 IL 而不是能直接在你的电脑上运行的机器码 程序集 Assembly 的文件负责封装中间语言 程序集中包含了描述所创建的方法 类以及属性的所有元数据 托管代码在公共语言运行库 CLR 中运行 这个运行库给运行代码提供了多种服务 通常来说 公共语言运行

托管代码

托管代码(Managed Code)实际上就是中间语言(IL)代码。

代码编写完毕后进行编译,此时编译器把代码编译成中间语言(IL),而不是能直接在你的电脑上运行的机器码。

程序集(Assembly)的文件负责封装中间语言,程序集中包含了描述所创建的方法、类以及属性的所有元数据。

托管代码在公共语言运行库(CLR)中运行。这个运行库给运行代码提供了多种服务,通常来说,公共语言运行库可以加载和验证程序集,并以此来保证中间语言的正确性。

当某些方法被调用时,公共语言运行库把具体的方法编译成适合本地计算机运行的机器码,并且将编译好的机器码缓存起来,以备下次调用时使用。这个过程就是即时编译。 

注意:程序实际上是被“托管”在公共语言运行库中。随着程序集的运行,公共语言运行库会持续地提供各种服务,例如内存管理、安全管理、线程管理等等。

如图:

区别:托管代码与非托管代码

非托管代码

 

非托管代码(Unmanaged Code)是指直接编译成目标计算机的机器码,这些代码只能运行在编译出这些代码的计算机上,或者是其他相同处理器或者几乎一样处理器的计算机上。

 

非托管代码不能享受公共语言运行库所提供的一些服务,例如内存管理、安全管理等。 

 

如果非托管代码需要进行内存管理等服务,就必须显式地调用操作系统的接口,通常非托管代码调用Windows SDK所提供的API来实现内存管理。

 

非托管程序也可以通过调用COM接口来获取操作系统服务。

 

注意:C#跟Visual Studio平台的其他编程语言不一样的是,C#可以创建托管程序与非托管程序。当创建的项目选择名字以MFC,ATL或者Win32开头的项目类型,那么这个项目所产生的就是非托管程序。

 

总结:

 

非托管代码(Unmanaged Code)不由CLR公共语言运行库执行,而是由操作系统直接执行的代码。

非托管代码必须自己提供垃圾回收,类型检查,安全支持等等服务

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/216577.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 上午11:33
下一篇 2026年3月18日 上午11:33


相关推荐

  • Apache Pulsar集群搭建

    Apache Pulsar集群搭建目录结构一 集群组成说明二 安装前置条件三 ZooKeeper 集群搭建 1 解压 Pulsar 安装包 2 修改 zookeeper conf 配置文件 三个节点上都需执行此操作 新增或修改如下关键配置项 3 在每个 zookeeper 节点的机器上 新建如下文件目录 4 为每个 zookeeper 节点新建 myid 分别在指定的 sever 上写入配置文件中指定的编号 5 执行后台运行命令 这个命令是启动 zookeeper 6 执行 zookeeper 客户端连接命令 7 在另外两台服务器上也执行 bin pulsar daemon

    2026年3月17日
    2
  • Latex修改itemize间距

    Latex修改itemize间距begin itemize setlength itemsep 想要的值如 15pt nbsp nbsp nbsp item nbsp nbsp nbsp item nbsp nbsp nbsp item nbsp end itemize begin itemize setlength itemse

    2026年3月17日
    1
  • 如何在Pycharm上安装PyQt5[通俗易懂]

    如何在Pycharm上安装PyQt5[通俗易懂]这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好!这是你第一次使用Markdown编辑器所展示的欢迎页。如果你想学习如何使用Mar

    2022年8月25日
    9
  • 虚拟机开启就会蓝屏的解决方法是_虚拟机无限蓝屏

    虚拟机开启就会蓝屏的解决方法是_虚拟机无限蓝屏VMware与win10(专业版)不兼容的问题前两天系统出了点问题,然后重置了系统,结果今天装VMware的时候发现一开虚拟机就蓝屏了。一、首先打开控制面板,找到启动或关闭Windows功能二、打开win+R,输入gpedit.msc三、打开控制面板>程序>查看已安装的更新,卸载最近的更新。总结前两天系统出了点问题,然后重置了系统,结果今天装VMware的时候发现一开虚拟机就蓝屏了。找了好些方法,重启了十几次电脑,后面才弄好提示:以下是本篇文章正文内容,下面案例可供参考一、首先打开控制

    2025年9月6日
    7
  • 【MDC智能驾驶开发者课程】1.华为MDC总体介绍

    【MDC智能驾驶开发者课程】1.华为MDC总体介绍文章目录 1 智能驾驶产业发展趋势 2 华为 MDC 智能驾驶计算平台 2 1 华为 MDC 平台的特性 3 典型应用场景 3 1 高速干线货运物流 3 2 末端无人物流配送 3 3 高危高强度特种作业 3 4 定点定时人员通勤 3 5 移动智能私人出行 4 参考 1 智能驾驶产业发展趋势 随着云计算 AI 边缘计算等新兴技术的不断涌现与成熟普及 数字世界正加速迈入万物互联的智能世界 百年汽车工业 也面临着产业智能化升级的现实挑战与历史机遇 以电动化 智能化 网联化 共享化为趋势的汽车 新四化 已成为行业内的普遍共识 现阶段汽车工业的发

    2026年3月16日
    1
  • 狂神说Linux_狂神说博客园

    狂神说Linux_狂神说博客园Linux在服务器端,很多大型项目都是部署在Linux服务器上利用VM + Centos7搭建本地Linux系统你可以使用 man [命令]来查看各个命令的使用文档,如 :man cp。概念云服务器就是一个远程电脑Linux中一切皆文件根目录/,所有的文件都挂载在这个节点下/bin:bin是Binary的缩写, 这个目录存放着最经常使用的命令。/boot: 这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。/dev : dev是Device(设备

    2022年8月9日
    12

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号