程序员用.net开发的程序要在计算机上运行,首先程序经过编译后,会生成机器指令,一般以一个文件的形式保存,这个文件在外存储器上(存储器分外存与内存。外存:硬盘,U盘等;)

然后cpu会把硬盘上的文件读到内存中,会在内存中分配一个内存区域,专门存放文件内容,会有个唯一的地址,cpu就会读到这个地址,取出内容,执行机器指令。

但是生成的程序却不能放到别的机器上和不同操作系统的计算机上进行执行,因为编译程序生成的文件包含了特定的cpu的机器指令,所以必须对代码加以修改,去适应不同计算机和不同操作系统的,这样的代码称为非托管代码。

这样的代码局限性太大,会给程序员带来很大重复性工作。因此后来在.net中出现了中间语言,这个就是程序经过编译以后就会转化为中间语言,但是中间语言不能被cpu所认识,必须转为为机器指令,这时就需要把中间语言翻译成机器语言,这时就出现了这样一个软件系统,叫着VM(虚拟机),虚拟机可以让不同计算机和不同操作系统运行程序,.net的这个虚拟机便是.net framework。运行在虚拟机上的代码成为托管代码。所以计算机要想运行.net程序,那么必须先安装.net framework 。

.net framework包含两个主要的组件:一是CLR(公共语言运行时),它是.net代码所必须的运行环境,CLR负责内存管理及分配与垃圾回收等工作,其选择编译器,将代码编译为IL(中间语言),并将IL和元数据加载到可执行文件中(dll或exe),第二次编译是使用JIT编译器将IL编译成机器语言(二进制代码),从而使计算机识别并加以运行。二是.net framework类库,这是.net开发的所需要的基本类库。托管代码就是以CLR为基础的可运行的代码,非托管代码反之。

 

最新文章

  1. js图片前端预览之 filereader 和 window.URL.createObjectURL
  2. SQL Server5个系统数据库
  3. 原生js完成拼图小游戏
  4. HTML 表单和输入<textarea><label><fieldset><legend><select><optgroup><option><button>
  5. C++注意事项
  6. 编译安装redis
  7. exp命令ORACLCE10G导出ORACLE11G的数据1455错误
  8. 用python3统计代码行数
  9. 利用Xilinx中的ROM构造查找表来计算sin和cos的方法探讨
  10. Hive操作之HQL语句
  11. 一段代码让你秒懂java方法究竟是传值还是传地址
  12. AbstractQueuedSynchronizer的介绍和原理分析(转)
  13. Chapter 1 First Sight——21
  14. 网页解析的全过程(输入url到展示页面)
  15. win10 uwp App-to-app communication 应用通信
  16. api-gateway实践(14)前端签名密钥和后端签名密钥
  17. Socket编程实践(11) --epoll原理与封装
  18. 关于用户登录状态存session,cookie还是数据库或者memcache的优劣
  19. 迭代dict的value
  20. Java Integer值用==和equals相等问题

热门文章

  1. bootstrap课程6 bootstrap的表单注意事项有哪些
  2. 基于element ui的图片预览插件
  3. js进阶 12-5 jquery中表单事件如何使用
  4. ARM+linux学习过程(2)安装vmware-tool过程与错误解决
  5. 3930: [CQOI2015]选数|递推|数论
  6. Fragment为载体可自己主动布局的CardView(GitHub上写开源项目初体验)
  7. Gora快速入门 分类: C_OHTERS 2015-01-30 09:55 465人阅读 评论(0) 收藏
  8. 2、Cocos2dx 3.0游戏开发找小三之引擎简单介绍
  9. 二次封装CoreData
  10. mycat schema.xml 配置文件详解