clr的执行模型(下)

1.1   通用类型系统

Common type system用于描述类型的定义和行为,具体可以看ECMA,最好了解一下es5 es6。

一个类可以包含0个或多个成员,字段、方法、属性、事件。

Private 类内部访问

Assembly 同一程序级访问

Family or assembly 由程序集中的派生类访问

Public 任何人都可以访问

1.2   公共语言规范

不同语言创建的对象可通过com相互通信,clr使用标准类型集、元素据、公共执行环境集成了所有语言。Common language specification,cls详细定义了最小功能集,编译器支持该功能集,生成的类型才兼容其他符合cls、面向clr的语言生成的组件。

1.3   与非托管代码的互操作性

Clr支持三种互相操作:

(1)托管代码能调用dll中的非托管函数

托管代码通过P/Invoke机制调用dll中的函数。

(2)托管代码可以使用现有COM组件(服务器)

对于大量非托管com服务器,可创建一个托管程序集来描述com组件,托管代码可以像访问托管类型一样访问托管程序集中的类型。

(3)非托管代码可以使用托管类型(服务器)

原文地址:https://www.cnblogs.com/lzcgis/p/10249843.html

时间: 2024-10-10 20:27:10

clr的执行模型(下)的相关文章

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

.Net 从代码生成到执行,这中间的一些列过程是一个有别于其他的新技术新概念,那么这是一个什么样的过程呢,有什么样的机制呢,清楚了这些基本的东西我们做.Net的东西方可心中有数.那么,CLR的执行模型是一个什么样的过程呢? 将源代码编译成托管模块 --> 将托管模块合并成程序集 --> 加载公共语言运行时 --> 执行程序集的代码 目录 将源代码编译成托管模块 将托管模块合并成程序集 加载公共语言运行时 执行程序集的代码 本地代码生成器:NGen.exe Framwork类库入门 通用类

第一章 CLR的执行模型

概念篇 CLR(Common Language Runtime)[公共语言运行时] 可由多种编程语言使用的运行环境,提供内存管理.程序集加载.安全性.异常处理和线程同步等支持. CTS(Common Type System)[通用类型系统] 规范化的类型定义和管理,比如:字段.方法等, 又比如继承等特性. CLS(Common Language Specification)[公共语言规范] 针对CLR/CTS定义的最基本的组建. Manuged Module[托管模块] 标准的32位Mircor

01 CLR 的执行模型

1.先将不同语言的代码生成托管模块. 如图,每个语言有自己对应的编译器. 和普通编译器不同,这个编译器是生成IL代码,不是直接的机器码. 编译也就是我们平时生成的过程. f5 c# 调用 C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe (我是这个版本,不同版本路径不同) 来编译. 也就是说.其实如果你不VS做开发, 可以只安装 .net Framework,写好代码之后通过它来编译 无视那个警告. 这就编译好了. 他可以是一个 DL

01.CLR的执行模型

在非托管的C/C++中,可以进行一些底层的操作 "公共语言运行时"(CLR)是一个可由多种编程语言使用的"运行时" CLR的核心功能包含: 内存管理 程序集加载 安全性 异常处理 线程同步 可由支持CLR的编程语言编写源代码,再由对应的编译器检查语法和分析源代码,最后都会生成托管模块,托管模块需要CLR才能执行 托管模块的组成: PE32或PE32+头:包含与本地CPU代码相关信息 CLR头:托管模块的头信息,包含CLR版本,一些标志等 元数据:元数据表,包含源代码

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

好吧,废话少说,先上一章Hello World图: 我们有了一个Hello world程序,如此之简单,再加上我今天没有用汉字编程o(>﹏<)o,所以一切很简单明了. 故事开始: 编译: 一个程序写完肯定要编译,以前什么C啊什么的都是编译成本机的CPU指令,但是我们的C#不是. C#,VB.NET都会把它们编译成托管模块,托管模块在一个标准的可移植的PE文件中.(那些懵懂的少年肯定慌了,这是什么鬼,又是托管模块又是PE文件的.莫慌,所有你听不懂的高大上的术语其实都很简单,你现在不需要懂,听我慢

第一章、 CLR的执行模型

1. 概述 本章主要是介绍从源代码到可执行程序的过程中,CLR所做的工作. 2. 名词解释 ① 公共语言运行时(Common Language Runtime, CLR),是一个可由多种语言使用的 运行时,核心功能(内存管理.程序集加载.安全性.异常处理和线程同步)可由面向CLR的所有语言使用. ② PE32:32位 Microsoft Windows 可移植执行体.    PE32+:64位 Microsoft Windows 可移植执行体. ③ 元数据 是一组数据表,这些数据表描述了 模块中

第1章CLR的执行模型1.1

1.1将源代码编译成托管代码模块 如上图,用支持CLR的任何一种语言来创建源代码文件.再用一个对应的编译器来检查语法和分析源代码.经编译器编译后生成托管模块(managed module),它是一个可移植执行体文件,它可能是32位(PE32)文件,也可能是64位(PE32+)文件.托管模块包括中间语言和元数据,需要CLR才能执行. 公共语言运行时(Common Language Runtime, CLR)是一个供多种编程语言使用的运行时.可用任何编程语言来开发代码,只要编译器是面向CLR的就行.

clr的执行模型(中)

1.1   执行程序集的代码 托管程序集包含IL和元素据.某种程度上IL可以当作面向对象的机器语言. 为了执行方法,需要把IL转换成本机CPU指令,由clr的JIT(just-in-time,即时)编译器完成.需要注意的是:Jit将cpu指令存在内存,程序终止时,需要重新编译cpu指令.性能方面,对大多数程序JIT造成的性能损失不显著. 1.1.1    IL与验证 IL是基于栈的,指令需要压入与弹出. IL编译成cpu指令时,CLR会执行 验证(verification)的过程,检查高级IL代

CLR的执行模型(4):执行程序集的代码

一直觉得,一本书的第一章是一定要读通的,这样子才知道这本书适不适合自己.所以,对于第一章的内容,我就啰嗦一些了. 托管程序集同时包含元数据和IL.IL是和CPU无关的机器语言,并且比大多数CPU语言都高级.IL能访问和操作对象类型,并且提供了创建和初始化对象的指令.调用对象上的虚方法以及直接操作数组元素.甚至实现了抛出和捕捉异常的指令,所以可将IL看成一种机器语言. 为了执行方法,首先必须吧方法的IL转换成本机CPU指令.这是CLR的JIT的职责. 下图展示了一个方法首次调用时候发生的事情: 在