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