在非托管的C/C++中,可以进行一些底层的操作

    "公共语言运行时"(CLR)是一个可由多种编程语言使用的"运行时"
    
    CLR的核心功能包含:
        内存管理
        程序集加载
        安全性
        异常处理
        线程同步
 
    可由支持CLR的编程语言编写源代码,再由对应的编译器检查语法和分析源代码,最后都会生成托管模块,托管模块需要CLR才能执行
 
    托管模块的组成:
        PE32或PE32+头:包含与本地CPU代码相关信息
        CLR头:托管模块的头信息,包含CLR版本,一些标志等
        元数据:元数据表,包含源代码定义的类型和成员,另一张表包含源代码中引用的类型和成员
        IL中间语言:编译器编译生成的的代码,在运行时,CLR将IL代码编译成本地代码
     
    程序集: 
        程序集是一个或多个模块/资源文件的逻辑性分组,是重用、安全性以及版本控制的最小单元,在CLR中,程序集相当于一个组件 
 
    托管程序集包含元数据和IL代码,IL是与CPU无关的机器语言,高级语言通常只公开CLR所有功能的一个子集,但IL能访问CLR中的所有功能
 
    JIT,即时编译,将IL转换成本地CPU指令(just in time),并对代码进行优化,优化后的代码性能更加出色
 
    JIT编译器将IL编译成本地CPU指令,将其存储在动态内存中,当程序结束,内存会回收。如果再一次启动程序或同一个程序打开两次,都会再次将IL编译成CPU指令
 
    IL是基于栈的,它的所有指令都将操作数压入一个执行栈,并从栈中弹出的结果。IL指令是无类型的。在将IL编译成本地CPU指令时,CLR会进行一次安全检测,检测所有的代码的安全性
 
    Microsoft C#编译器允许开发人员写不安全的代码,只在在程序有需要直接操作内存地址,并处理地址中的字节,或者与其它非托管程序交互,编写一个高性能的算法等
    
    本地代码生成器:NGen.exe
    将IL代码编译成本地代码,加快程序的启动速度,减少应用程序的工作集,实现共享
        
    通用类型系统
    CLR是完全围绕类型展开的,Microsoft制定了一个规划"通用类型系统"(CTS),描述了类型的定义和行为
 
    公共语言规范
    定义一个语言规范,由多个编程语言去实现,在开发过程中,遵循这个规范可以得到更好的兼容性
 
    使用C#来编写代码,告诉编译检查CLS的相容性
    [assembly: CLSCompliant(true)]
    
    CLR支持三种互操作情形
    1.托管代码能调用DLL中的非托管函数
    2.托管代码可以使用现有的COM组件
    3.非托管代码可以使用托管类型

01.CLR的执行模型的更多相关文章

  1. 【C#进阶系列】01 CLR的执行模型——一个Hello World的故事

    好吧,废话少说,先上一章Hello World图: 我们有了一个Hello world程序,如此之简单,再加上我今天没有用汉字编程o(>﹏<)o,所以一切很简单明了. 故事开始: 编译: ...

  2. 01.由浅入深学习.NET CLR 基础系列之CLR 的执行模型

    .Net 从代码生成到执行,这中间的一些列过程是一个有别于其他的新技术新概念,那么这是一个什么样的过程呢,有什么样的机制呢,清楚了这些基本的东西我们做.Net的东西方可心中有数.那么,CLR的执行模型 ...

  3. CLR 的执行模型(2)

    第一章 CLR 的执行模型(2) 本篇内容大纲 Framework 类库(Framework Class Library , FCL) 通用类型系统(Common Type System,CTS) 公 ...

  4. 第一章 CLR 的执行模型

    CLR via C# 读书笔记:第一章 CLR 的执行模型(1) 第Ⅰ部分CLR基础.这部分为三章(第一章:CLR的只想能够模型,第二章:生成.打包.部署和管理应用程序及类型,第三章:共享程序集和强命 ...

  5. 第一部分 CLR基础:第1章 CLR的执行模型

    1.1将源代码编译成托管模块

  6. 第1章 CLR的执行模型

    1.1将源代码编译成托管代码模块

  7. CLR via C#读书笔记一:CLR的执行模型

    CLR(Common Language Runtime)公共语言进行时是一个可由多种编程语言使用的“进行时”. 将源代码编译成托管模块 可用支持CLR的任何语言创建源代码文件,然后用对应的编译器检查语 ...

  8. CLR_Via_C#学习笔记之CLR的执行模型

    1:公共语言运行时(Common Language Runtime,CLR)是一个可由多种编程语言使用的“运行时”.CLR的核心功能(比如内存管理.程序集加载.安全性.异常处理和线程同步)可由面向CL ...

  9. 第一章、 CLR的执行模型

    1. 概述 本章主要是介绍从源代码到可执行程序的过程中,CLR所做的工作. 2. 名词解释 ① 公共语言运行时(Common Language Runtime, CLR),是一个可由多种语言使用的 运 ...

随机推荐

  1. My Site Cleanup Job

    解决办法: The My Site of Linda Wang ??? is scheduled for deletion in 3 days. As their manager you are no ...

  2. PL/SQL控制语句(二、循环控制语句)

    循环允许重复执行代码直到循环条件匹配,PL/SQL中循环主要有LOOP语句和EXIT语句两种,这两种语句相辅相成,一起组成了PL/SQL的循环结构.在PL/SQL中,循环分为四大类,本文将会讲解其中的 ...

  3. 【经典漏洞案例】NSA黑客工具包——Windows 0day验证实验

    还记得今年4月中旬,Shadow Brokers(影子经纪人)黑客组织发布出一份震惊世界的机密文档,其中包含了多个Windows 远程漏洞利用工具,此工具集覆盖大量的Windows服务 器,可以被任何 ...

  4. [SQL] 简单新建(create)删除(drop\delete)权限(grant/revoke)修改(set\update)

    一.前言 说起来 数据库(Structured Query Language),本站写过很多类似文章. 如: Mysql创建.删除用户 phpMyAdmin 登陆需要密码 记一次裸迁 MySQL 经历 ...

  5. Spring aop+自定义注解统一记录用户行为日志

    写在前面 本文不涉及过多的Spring aop基本概念以及基本用法介绍,以实际场景使用为主. 场景 我们通常有这样一个需求:打印后台接口请求的具体参数,打印接口请求的最终响应结果,以及记录哪个用户在什 ...

  6. 总结day23 ---- 网络编程,以及计算机基础概念

    计算机网络的发展及基础网络概念 问题:网络到底是什么?计算机之间是如何通信的? 早期 : 联机 以太网 : 局域网与交换机 广播 主机之间“一对所有”的通讯模式,网络对其中每一台主机发出的信号都进行无 ...

  7. SaltStack Pillar 详解

    简介 grains用于存储静态不易变更的数据,而pillar一般用于存储动态, 敏感的数据,通过minion和master设置或获取grains信息,而pillar信息只能在master端配置,在到m ...

  8. Eclipse 的SVN 的分支

    分支 概念 在版本控制过程中,使用多个分支同时推进多个不同功能开发.   不使用分支开发:人与人之间协作   使用分支开发:小组和小组之间协作 作用  多个功能开发齐头并进同时进行 任何一个分支上功能 ...

  9. 腾讯云服务器安装宝塔面板快速配置LNMP/LAMP网站系统

    我们在选择购买腾讯云服务器之后,有部分用户肯定是用来建站用途的.毕竟云服务器的性能和功能比虚拟主机优秀很多.腾讯云服务器拥有香港.北京.广州.上海.美国等多个机房,可以安装Linux和Windows系 ...

  10. bash: wget: command not found

    有些VPS执行wget命令下载时,提示-bash: wget: command not found错误,其实这是由于系统中没有安装wget,我们只要执行安装命令安装即可. yum -y install ...