.Net Framework CLR 托管程序执行机制
2014-01-19 12:22
232 查看
Managed Execution Process
Running Code
Common Language Runtime(CLR)是.Net托管程序执行的基础,在某个方法执行前,MSIL代码会被Just in Time(JIT)编译器编译成本地特定的处理器代码。每个方法在第一次调用前都会被JIT编译器生成本地代码,而下一次执行时,则直接调用已经存在的JIT编译的本地代码。 JIT编译和执行会一直不断重复直到执行结束。
在执行过程中,托管代码接受如垃圾回收,安全,与非托管代码交互,跨语言调试支持,增强部署,版本支持等服务。
在window XP和vista, 操作系统loader会通过检查COFF头的一个字节位判断程序是否为托管模块, 如果是,则加载mscoree.dll,_CorValidateImage方法 和
_CorImageUnloading方法会通知loader托管模块已加载和已卸载.
_CorValidateImage 执行以下动作:
1.确认代码是有效的托管代码
2. 把映像的入口设成当前运行时入口
在64位window系统, 会把映像在内存中的格式由PE32转换为PE32+格式
参考: http://msdn.microsoft.com/en-us/library/k5532s8a(v=vs.110).aspx#introduction
Managed Execution Process
Running Code
Common Language Runtime(CLR)是.Net托管程序执行的基础,在某个方法执行前,MSIL代码会被Just in Time(JIT)编译器编译成本地特定的处理器代码。每个方法在第一次调用前都会被JIT编译器生成本地代码,而下一次执行时,则直接调用已经存在的JIT编译的本地代码。 JIT编译和执行会一直不断重复直到执行结束。
在执行过程中,托管代码接受如垃圾回收,安全,与非托管代码交互,跨语言调试支持,增强部署,版本支持等服务。
在window XP和vista, 操作系统loader会通过检查COFF头的一个字节位判断程序是否为托管模块, 如果是,则加载mscoree.dll,_CorValidateImage方法 和
_CorImageUnloading方法会通知loader托管模块已加载和已卸载.
_CorValidateImage 执行以下动作:
1.确认代码是有效的托管代码
2. 把映像的入口设成当前运行时入口
在64位window系统, 会把映像在内存中的格式由PE32转换为PE32+格式
参考: http://msdn.microsoft.com/en-us/library/k5532s8a(v=vs.110).aspx#introduction
相关文章推荐
- .Net Framework CLR 之 托管执行过程
- .Net Framework的公共语言执行环境(CLR)
- 图解 dotnet framework(CLR\类库]托管\非托管代码)
- ASP.NET定时执行任务 (不使用外接程序,.net内部机制实现)
- .Net Framework 4.x 程序到底运行在哪个 CLR 版本之上(ZT)
- .Net Framework 4.x 程序到底运行在哪个 CLR 版本之上
- (翻译)《Expert .NET 2.0 IL Assembler》 第四章 托管可执行体文件的结构 4.2 CLR头(一)
- CLR via C# 摘要一:托管程序的执行模型
- (翻译)《Expert .NET 2.0 IL Assembler》 第四章 托管可执行体文件的结构 4.2 CLR头(二)
- 脱离.NET Framework运行托管程序.
- 如何将VB.NET程序打包成可执行的.exe程序
- 使用托管类库加速.Net Compact Framework开发
- 关于Net Core 多平台程序的Framework问题
- 正试图在 os 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内运行托管代码
- 验证C#程序脱离.net framework环境运行(飞信法)
- error 25015安装程序集“C:\Windows\Microsoft .NET\Framework\v2.0.50727\xxx.dll”失败,原因是出现了系统错误:另一个程序正在使用此文件,进程无法访问
- 一键式安装.Net FrameWork,MSDE,Web安装程序,Windows安装程序,还原数据库文件,注册表导入
- 让.Net 程序脱离.net framework框架运行
- zz 使.Net程序在未安装framework的电脑上运行(公布方法、源代码)
- .NET Framework 4.0 中如何把一个程序部署到全局应用缓存(GAC)