欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

CLR中你想知道的事

程序员文章站 2022-06-19 17:27:02
CLR是什么? CLR 公共语言运行时,是一个可由多个语言共同使用的运行环境,核心(内存管理,程序集加载,安全性,异常处理和多线程) Visual Studio是一种编译器,编译器也可称为语法检查器和正确代码的分析器 Visual Studio点击生成或调试的时候干了什么? 编译器会生成一个托管模块 ......

clr是什么?

clr 公共语言运行时,是一个可由多个语言共同使用的运行环境,核心(内存管理,程序集加载,安全性,异常处理和多线程)

visual studio是一种编译器,编译器也可称为语法检查器和正确代码的分析器

visual studio点击生成或调试的时候干了什么?

编译器会生成一个托管模块。托管模块是一个可移植执行体(pe32)文件,如果是64位则是可移植执行体(pe32+)文件

visual studio为什么可以智能感知类的方法和参数?

托管模块组成包括,pe32或pe32+头,clr 头,元数据,il代码,重点就在元数据上,元数据是一个数据表集合,数据表中描述了模块中定义了什么,包括类型和成员,另一些描述了模块里面引用了什么,包括引用的类型和成员,而且生成的元数据和代码是绑定到一起的,所以元数据和他的描述的il代码就能永远同步。

元数据用途:1.避免对原生c/c++头和库文件的需求 2.智能感知方法还有参数 3.代码验证,确保类型安全 4.允许对象序列化到内存块 5.允许垃圾回收期跟踪对象生存期

il是什么,能干什么?

il是一种高级机器语言,il代码又被称为托管代码,是microsoft作者们费尽心思地跟很多编译器作者们请教之后的产物,能访问和操作对象类型,并提供指令来创建和初始化对象、调用对象上的虚方法以及直接操作数组元素、还提供了抛出和捕获异常的指令来实现错误处理,

编译成il代码之后会再次编译,最终生成能被cpu识别的机器指令,然后执行。

il如何执行?

说到执行,首先要提到编译,il编译要用到jit编译器,jit编译之后的入口函数称为jitcompiler,如何编译得到jitcompiler函数,请看下面这个代码:

static void main(string[] args)
{
       console.writeline("helloworld");
}

执行步骤如下:

1.在负责实现类型(console)的程序集的元数据中查找被调用的方法(writeline)

2.从元数据中获取该方法的il

3.分配内存块

4.将il编译成本机cpu指令,然后将这些本机代码存储到步骤3分配的内存中

5.在type表中修改与方法对象的条目,使它指向步骤3分配的内存块

5.跳转到内存块中的本机代码

为什么说c++牛逼?

c++编译器是独一无二的,它是唯一允许开发人员同时写托管和非托管代码,并生成到同一个模块中。

pdb文件有什么用?

visual studio当使用debug模式的时候会再debug文件夹中生成pdb文件,pdb文件可以帮助调试器查找到局部变量并将il指令映射到源代码,进行调试。

托管代码和非托管代码的区别?

托管代码简单说就是需要经过clr二次编译的代码,非托管代码就是可以直接编译成cpu指令的代码。