举例图中, 一个C#编写的测试程序,

输出两句话分别 : Hello, GoodBye, 介绍其在windows上CLR的调用过程。

1.在执行Main方法之前, CLR会检测出Main的代码引用的所有类型。这导致CLR 分配一个内部数据结构来管理对引用类型的访问。

Main方法首次调用WriteLine时, JIT函数会被调用,JIT函数负责将方法的IL代码编译成本机CPU指令,

由于IL是即时编译的, 所以CLR这个组件称为JIT编译器

2. JIT函数被调用时, 它知道要调用的是哪个方法, 以及具体是什么类型定义了该方法。

然后, JIT会在定义该类型的程序集的元数据中查找被调用方法的IL。

接着,JIT验证IL代码, 并且将IL代码编译成本机CPU指令。本机CPU指令保存到动态分配的内存块中。

然后,JIT回到CLR为类型创建内部数据结构, 找到与被调用方法对应的那条记录,

修改最初对JIT的引用, 使其指向内存块的地址。

最后, JIT 函数跳转到内存块中的代码, 这些代码正式WriteLine方法, 代码执行完成返回时,

会回到Main中的代码, 像往常一样继续执行。

最新文章

  1. Entity Framework
  2. SQL Server 阻止了对组件 'Ole Automation Procedures' 的 过程'sys.sp_OACreate' 的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用 sp_configur
  3. 关于web前端的学习路线
  4. 关于checkbox与文字混排无法对齐的解决方法
  5. Java Hour 43 Weather ( 12 ) - 杭州 Show
  6. [转载] zookeeper 事件通知
  7. 互联网 DBA 需要做那些事(转)
  8. QDialog之屏蔽Esc键
  9. Jquery 计算表格某一列的合计
  10. delphi 编写一个dos 窗体
  11. 初涉JavaScript模式 (13) : 代码复用 【上】
  12. 学习head first python一书用到的程序(安卓开发/GAE)
  13. SQL点滴32—Excel中CONCATENATE函数生成SQL语句
  14. Meta标签中的format-detection属性及含义让IPHONE的数字可以改变颜色
  15. Ninja介绍
  16. 抓取Android应用的log
  17. Python3+Appium安装使用教程
  18. git 提交本地工程
  19. PHP中对象的深拷贝与浅拷贝
  20. How to enable usb on vbox

热门文章

  1. Pretty UI Design For Android -- 滑动背景、透明列表
  2. WebForms简介
  3. 分享一个vueui axios-mock-adapter 中的用法
  4. UESTC 1584
  5. 在Windows下如何创建指定的虚拟环境
  6. 指尖上的电商---(10)SolrAdmin中加入多核
  7. ASP.Net简单的交互案例
  8. 轻松使用 Redis slowlog
  9. 浏览器加载渲染HTML、DOM、CSS、 JAVASCRIPT、IMAGE、FLASH、IFRAME、SRC属性等资源的顺序总结
  10. 【bzoj4864】神秘物质