您的位置:首页 - .NET
.NET的CLR介绍
clr基本
CLR(Common Language Runtime)是一个可由多种编程语言使用的“运行时”。(例如:c#,c++/cli,vb,f#,ironpython,ironruby,il...)
CLR的核心功能内存管理、程序集加载、安全性、异常处理、线程同步、泛型、尾调用指令和基本的公共语言基础结构 (CLI) 类型系统等。
托管模块是一个标准的32位microsoft windows可移值执行体pe32文件(64位系统为pe32+),他们需要clr才能执行。
托管的程序集总是利用windows的数据执行保护和地址空间布局随机化,这2个功能旨在增强整个系统的安全性。
托管模块的组成部分:pe32(或pe32+)头,clr头,元数据,il中间代码。
本地代码编译器生成的是面向特定cpu架构的代码。相反每个面向clr的编译器生成的都是il代码。
源代码文件----》编译器----》托管模块

加载CLR
.net framework sdk提供了名为clrver.exe的命令行使用程序,它能列出一台机器上安装的所有clr版本。
c#编译器可以指定一个平台(基于x86 windows,x64 windows或者ia64 windows).net4.0之前默认anycpu,4.0 exe项目默认x86
如果一个非托管应用程序调用loadlibrary来加载一个托管程序集,windows会自动加载并初始化clr,以便处理程序集中的代码。

执行clr
托管程序集同时包含元数据和il。il是与cpu无关的机器语言。il比大多数cpu机器语言都要高级。il也能使用汇编语言来写。
为了执行一个方法,首先必须把它的il转换为本地cpu指令。这是clr的jit编译器的职责。
首次执行托管exe---->jitcompiler---->查找方法、从元数据中获取il、分配内存块、编译cpu指令、修改方法对应的记录项、跳转内存块中的本地代码
第二次执行托管exe跳过jitcompiler直接跳转内存块中的本地代码
对于大多数应用程序,因jit编译造成的性能损失并不显著,而且clr的jit编译器会对本地代码进行优化,优化后的代码会获得更出色的性能。
c#调试产生的pdb文件就是帮助调试器查找局部变量并将il指令映射到源代码。
release版本就是让发布程序经过jit优化,所以线上项目最好都以release版本发布
clr提供一个在操作系统进程中执行多个托管应用程序的能力。每个托管的应用程序都在一个appdomain中执行。
本站导航
相关文章
柯乐义 Copyright© keleyi.com