CLR VIA C# 的阅读笔记和感悟(一)

写在前面的话:

        工作一年了,从最初的小白,通过慢慢地做项目,百度查资料,慢慢地也适应了程序员的工作,从最初做项目的焦头烂额,到现在已经可以较为轻松得从事开发工作,当然还是停留在简单开发的层次,就是根据项目需求,查询相关技术文档现学现卖,不过项目倒是做得还算成功,没有出现多大问题,也学会使用IOC、AOP技术对项目进行合理性的分层来保证层之间架构的清晰性,职责单一高内聚低耦合,开闭原则等,也学会了各种工具库Newtonsoft,NLog,EmguCV等。由于开发顺利多了,时间也算充裕一些,所以想在现有的基础上进行深入的学习,看看平时写的代码,底层到底是如何识别并执行的,自上而下地学习。现在学习的是CLR VIA C#  第四版。

名词:

    IL:全称是Intermediate Language(中间语言),也叫它汇编语言,平时用任何语言写的代码源码都会通过对应的编译器编译成IL代码,IL语言也是一种面向对象的语言,不过难以阅读,所以很少有人会直接使用它,更多的使用场景都在软件安全方面 。

    CLR:全称是Common Language Runtime (公共语言运行时),我们平时用任何语言写的代码都会通过对应的代码编译器执行编译操作生成可供CPU执行的CPU指令,并交由执行,而把这些CPU指令交给CPU执行的操作是有CLR来完成的,准确的说是CLR的JIT编译器完成的。

    JIT:全称是Just-In-Time(即时),我们平时写的代码到底是如何被计算机识别并执行的,就是通过JIT编译器来完成,JIT是CLR中的一个组件,专门负责编译IL代码并生成CPU指令,交由CPU执行,只有CPU指令才是计算机能够识别的语言。

    CTS:全称是Common Type System(通用类型系统),C#的编译器到底是遵循什么样的规范来对我们写的代码进行错误检查的?CTS就是这样的规范,它是由Microsoft提出的用来规范类型的定义和行为的规范。

    CLI:全称是Common Language Infrastructure(公共语言基础结构),它是微软提交自身的CTS和.NetFramework交由ECMA制定的标准。

    ECMA:百度百科的解释:这个组织的目标是评估,开发和认可电信和计算机标准。大家决定把ECMA的总部设在日内瓦是因为这样能够让它与其它与之协同工作的标准制定组织更接近一些,比方说国际标准化组织(ISO)和国际电子技术协会(IEC)。ECMA是“European Computer Manufactures Association”的缩写,中文称欧洲计算机制造联合会。是1961年成立的旨在建立统一的电脑操作格式标准--包括程序语言和输入输出的组织。

    P\Invoke:跨平台操作的统称,C#的代码称为托管代码,而其他语言则是非托管代码,通过dllimport特性能够实现跨平台操作。

    小结:我们学习的C#语言实现的功能只是CLR全部功能中的一部分,各种语言的功能都只是实现CLR的一部分功能,所以如果能够跨语言互操作,那就能最大限度地使用CLR提供的功能了,而跨语言是IT发展的最大目标。

类:

        类型实例化时究竟做了什么?

        借用书中的演示图:


上图是代码执行过程中创建的线程在执行代码时的内存解析图,线程在启动时会创建1M左右的内存空间,代码执行时会根据具体执行到的代码通过jit编译器动态创建内存并存储对应的CPU指令,这个过程中涉及到了类型的实例化过程,所以暂时把这张图放到这里来,并为之后的进程线程的概念进行提前预知。类型在实例化的时候实际上是调用的该类的构造函数,构造函数会根据类型自身的属性、字段、事件和方法计算出占用内存空间的总和来在内存中开辟一块连续的内存空间,这块内存空间包含了几块内容,类型对象指针、同步索引块、实例字段。类型对象指针其实就是Type类型实例的内存地址,在类实例化时都会在同时实例化Type类型,Type实例保存的是类实例化时生成的实例的一些底层信息,包括Type实例自身的指针,同步索引块,静态字段,和CPU指令集,CPU指令集保存的是实例化类在使用自身的属性、字段、事件、方法时即时编译的CPU指令。也就是说类型在实例化时,除了会创建自身所需的必要的内存空间外还会额外的创建其他的内存空间,而这块内存空间保存的是指针,指针指向的是当前实例类更为底层的数据。同步块索引是用来保存代码执行过程中类变量在执行栈中的索引,便于JIT编译器能够准确地查找到变量并赋予类实例的内存地址。

版权声明:本文为博主原创文章~转载请注明出处


猜你喜欢

转载自blog.csdn.net/u014690615/article/details/79940078