• CLR基础


    一、各个语言的长处

    ①非托管C/C++可对系统进行低级控制。可完全按照自己的想法管理内存,必要时方便地创建线程
    ②使用Microsoft Visual Basic 6.0可以快速生成UI应用程序,并可以方便的控制COM对象和数据库
    ③公共语言运行时(CLR)是一个可以由多种编程语言使用的“运行时”。CLR的核心功能(内存管理、程序集加载、安全性、异常处理、线程同步)可由面向CLR的所有语言使用

    二、什么是托管模块

    托管模块是标准的32位Microsoft Windows可移植执行体(PE32)文件,或者是标准的64位Windows可移植执行体(PE32+)文件,它们都需要CLR才能执行
    【PE:可移植执行体】

    三、托管模块的各个组成部分

    组成部分

    说明

    PE32或PE32+

    ①标准Windows PE文件头。这个头使用PE32或PE32+格式

    ②标识文件类型(GUI,CUI或者DLL),并包含文件的生成时间

    对于只包含IL代码的模块,PE32(+)头的大多数信息会被忽视。如果包含(native)CPU代码的模块,这个头包含与本机CPU代码有关的信息

    CLR

    包含使这个模块成为托管的信息(可由CLR和一些实用程序进行解释)

    ①CLR版本(major(主)minor(次)版本号)

    ②一些标志(flag)

    ③托管模块入口方法(Main方法)的MethodDef元数据token

    ④元数据

    ⑤资源

    ⑥强名称

    ⑦一些标志及其他不太重要的数据项的位置/大小

    元数据

    每个托管模块都包含元数据表(两种表)

    ①描述源代码中定义的类型和成员

    ②描述代码引用的类型和成员

    IL(中间语言)代码

    编译器编译源代码时生成的代码。在运行时,CLR将IL编译成本机CPU指令

    四、安全性

    托管语言总是利用Windows的数据执行保护(Data Execution Prevention DEP)和地址空间布局随机化(Address Space Layout Randomization ASLR)来增强整个系统的安全性

    五、什么是IL代码

    IL代码有时称为托管代码,因为CLR管理它的执行

    六、元数据

    1,什么是元数据
    ①元数据是一些老技术的超集。这些老技术包括COM的“类型库”(Type Library)和“接口定义语言”(Interface Definition Language,IDL)文件
    ②元数据和类型库和IDL不同,元数据总是与包含IL代码的文件关联(元数据总是嵌入和代码相同的EXE/DLL文件中,并嵌入最终生成的托管模块,所以元数据和它描述的IL代码永远不会失去同步)

    2,元数据的用途
    ①元数据避免了在编译时对原生C/C++头和库文件的需求,编译器直接从托管模块中读取元数据
    ②Microsoft Visual stidio“智能感知”技术会解析元数据,告诉你一个类型提供了那些方法、属性、事件和字段。对于方法,还能告诉你需要的参数
    ③CLR的代码验证过程使用元数据确保代码只执行“类型安全”的操作
    ④元数据允许将对象的字段序列化到内存块,将其发送到另一台机器,然后反序列化,在远程机器上重建对象状态
    ⑤元数据允许垃圾回收器跟踪对象的生存期。垃圾回收期能判断任何对象的类型,并从元数据知道那个对象中的哪些字段引用了其他对象

    七、C++编译器

    Microsoft C++编译器的灵活性是其他编译器无法比拟的,因为它允许开发人员在托管代码中使用原生的C/C++代码

    八、什么是程序集

    ①一个或多个模块/资源文件的逻辑分组
    ②重用、安全性、版本控制的最小单元
    ③相当于组件
    ④将托管模块合并成程序集

    九、MSCorEE.dll


    当运行应用程序时,windows检查exe文件头,决定创建32位或者64位进程之后,会在进程地址空间加载MSCorEE.dll的x86,x64或ARM版本,然后进程的主线程调用MSCorEE.dll中定义的一个方法。这个方法初始化CLR,加载EXE程序集,在调用其入口方法(Main)。随即,托管应用程序启动并运行

    学习永不止境,技术成就梦想。
  • 相关阅读:
    对于大规模机器学习的理解和认识
    Failed to initialize NVML: GPU access blocked by the operating system
    ubuntu 当中添加开机启动服务
    洛谷P2882 [USACO07MAR]面对正确的方式Face The Right Way(贪心)
    注意注意!
    洛谷P5092 [USACO2004OPEN]Cube Stacking 方块游戏 (带权并查集)
    loj10017. 「一本通 1.2 练习 4」传送带(三分套三分)
    POJ1475 Pushing Boxes(BFS套BFS)
    CF451E Devu and Flowers(组合数)
    POJ2311 Cutting Game(博弈论)
  • 原文地址:https://www.cnblogs.com/zd1994/p/6308587.html
Copyright © 2020-2023  润新知