托管代码

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

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

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

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

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

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

如图:

非托管代码

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

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

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

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

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

总结:

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

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

区别:托管代码与非托管代码相关推荐

  1. 托管代码和非托管代码的区别

    什么是托管代码? 托管代码是一microsoft的中间语言,他主要的作用是在.NET FRAMEWORK的CLR执行代码前去编译源代码,也就是说托管代码充当着翻译的作用,源代码在运行时分为两个阶段: ...

  2. .Net 托管代码和非托管代码的区别

    1.什么是托管代码(managed code)? 托管代码是一microsoft的中间语言(IL),他主要的作用是在.NET FRAMEWORK的公共语言运行库(CLR)执行代码前去编译源代码,也就是 ...

  3. 托管代码和非托管代码的介绍,以及在这区别下的混合调试方法

    什么是托管代码(managed code)? 托管代码是一microsoft的中间语言(IL),他主要的作用是在.NET FRAMEWORK的公共语言运行库(CLR)执行代码前去编译源代码,也就是说托 ...

  4. 托管代码与非托管代码

    什么是托管代码? 托管代码是一microsoft的中间语言,他主要的作用是在.NET   FRAMEWORK的CLR执行代码前去编译源代码,也就是说托管代码充当着翻译的作用,源代码在运行时分为两个阶段 ...

  5. 托管代码和非托管代码

    一.什么是"托管代码"? 1.1.托管代码     托管代码是使用可在 .NET 上运行的一种高级语言(例如 C#.Visual Basic.F# 等)编写的. 使用相应的编译器编 ...

  6. C#基础知识之托管代码和非托管代码

    什么是托管代码(managed code) 托管代码(Managed Code)就是中间语言(IL)代码,在公共语言运行库(CLR)中运行.编译器把代码编译成中间语言,当方法被调用时,CLR把具体的方 ...

  7. 托管代码与非托管代码之间与托管程序

    自.Net问世以后,我们习惯的VC++,VB编程模式有了很大的变换,托管与非托管的概念也不断映入程序员们的眼帘,可以说.NET正逐步成为编程的主流语言和平台之一.今天不与大家讨论谁主沉浮,也不发表慷慨 ...

  8. [转]托管代码与非托管代码

    什么是托管代码(managed code)? 托管代码是一microsoft的中间语言(IL),他主要的作用是在.NET   FRAMEWORK的公共语言运行库(CLR)执行代码前去编译源代码,也就是 ...

  9. C# CLRInsideOut 托管代码与非托管代码互操作,产生相关调用代码的好工具 C++ 头文件转C# 的好工具...

    CLRInsideOut  托管代码与非托管代码互操作,产生相关调用代码的好工具 C++ 头文件转C# 的好工具 http://download.csdn.net/source/2914818 转载于 ...

  10. 托管代码与非托管代码之间的交互

    基础知识:如下所示: 1.在运行时控制下执行的代码叫做托管代码:在运行时之外执行的代码叫做非托管代码. 2.可以使用vs提供的dumpbin工具来获取动态链接库中提供的所有函数.如:dumpbin / ...

最新文章

  1. python基础教程书籍推荐-python入门书籍推荐
  2. Android异步消息处理机制完全解析,带你从源码的角度彻底理解
  3. PostgreSQL的 array_to_string 功能
  4. Nginx 301跳转踩坑总结
  5. 计算机领域的范式,编程领域的范式转移
  6. PHP设计模式(6)迭代器模式
  7. OC语言Block 续
  8. brainfuck 在线_酒店在线声誉持久战 重视社媒舆论 保持品牌一致性
  9. 准确度判断 语义分割_【语义分割】DeepLab v1/v2
  10. qt撤销与回退_Git撤销某次分支的合并Merge
  11. 单元测试框架unittest
  12. centos 配置subversion svn
  13. Elastic Job 入门
  14. GridView里面的Item高度设置
  15. java和Js中的类型转换_graalvm js 与java 类型转换的一些方法
  16. 计算机组装专周实训心得,电脑组装实训心得3篇
  17. Task08|文本数据|joyfulpandas
  18. 阿里云国际版短信发送
  19. Windows下的IIS日志管理
  20. 真·电子二胡 (ESP32配合库乐队APP实现的电子制作)

热门文章

  1. 丰田发布“大眼萌”机器人,只有手掌大小!
  2. ffmpeg h264解码器分析sps(二)
  3. 织梦5.7sp1最新问题:后台不显示编辑器
  4. Linux内核分析 读书笔记 (第一章、第二章)
  5. 基于Tushare数据库统计混合型基金前十大重仓股持仓变化
  6. Nginx配置HTTPS客户端认证
  7. 你还在为移动端选择器picker插件而捉急吗?
  8. 软银与ARM联合公开信:ARM已成软银集团一员 业务如常
  9. PC突然开始只能输入繁体,那可能是这个设置出了问题
  10. visual studio下Incredibuild插件崩溃的解决