CLR via C# 读书笔记1-1

Moltemplate建模----水盒子data文件 1功能介绍 Moltemplate是LAMMPS官方支持的建模工具之一,适用于LAMMPS建模。该程序创建了一种简单的文件格式来存储分子定义和力场,即模板LT。LT文件包含与特定分子有关的所有文本(包括坐标,键拓扑,角度,力场参数,约束,组和修复)。 Moltemplate可以复制分子,对其进行自定义,然后用它作为构建更大、更复杂分子的基础。构建后,可以自定义... 阅读详情

CLR via C# 读书笔记1-1

把源代码编译为托管模块 (Managed Modules)

进行开发之前,你首先需要选择你擅长的语言。某些时候这很难抉择,因为不同的开发语言提供不同的开发特性。例如:非托管 C/C++ 提供了操作系统非常底层的控制权,你能够随心所欲地管理内存,轻而易举地建立线程,等等。 相反的 Microsoft Visual Basic 6.0 让你能快速的开发 UI 界面程序,而且提供了简便的使用 COM 对象以及数据库的方法。

 

common language runtime (CLR) 就如它的字面含义:一个被许多不同开发语言所使用的运行时。他的主要特性 (内存管理, 程序集载入, 安全, 异常处理, 以及线程同步) 在他对应的所有开发语言中被支持。举例来说,这个运行时使用异常来报告错误,所以所有这个运行时对应的开发语言都能通过异常来得到错误报告。再举一个例子:这个运行时允许建立线程,所以所有这个运行时对应的开发语言都能建立线程。

事实上,在运行的时候 CLR 并不知晓程序使用了那种开发语言。这意味着你可以选择任何你擅长的语言(只要是CLR支持的语言)。那么不同的语言之间还存在优势/劣势吗?我觉得编译器就像一个语法检查器,它检查你的源代码,确认你想做的,然后输出。不同的语言采用不同的语法,而不同的语法通常有其针对性,有些善于数学公式,有些善于线程同步...,你可以根据实际情况选择适合的语言。

微软已经建立了几个语言(C++/CLI, C#, Visual Basic, F#, Iron Python, Iron Ruby, IL)编译器来对应该运行时。与此同时一些企业,教育机构也建立了一些语言编译器来支持 CLR,就我所知的有 Ada, APL, Caml, COBOL, Eiffel, Forth, Fortran, Haskell, Lexico, LISP, LOGO, Lua, Mercury, ML, Mondrian, Oberon, Pascal, Perl, PHP, Prolog, RPG, Scheme, Smalltalk, 以及 Tcl/Tk.


如插图所示,使用这些编译器进行处理后,用不同开发语言写成的源代码都会被输出成托管模块 (managed module)。托管模块 (managed module)是一个标准的32/64位 Windows 可执行文件(PE32 / PE32+),当然它运行在 CLR 上。顺便说下:托管模块 (managed module)在Windows系统上总是具备 Data Execution Prevention (DEP) 以及 Address Space Layout Randomization (ASLR) 特性,这两个特性提升了整个系统的安全性。

 

托管模块(Managed Module)的组成

组成说明
PE32 / PE32+ 头标准的 Windows PE 头文件与 Common Object File Format (COFF) 头文件非常类似。使用了PE32 格式的头信息使得这个文件能在 32 / 64 位的 Windows 中运行,如果头信息是 PE32+ 格式,那么这个文件只能运行在 64 位的 Windows 上。这个头信息还表明了当前文件的类型: GUI, CUI, 或者 DLL,另外还包含了一个时间戳(表明何时被编译)。 对于只包含了 IL 代码的模块,用来存储 PE32(+) 头信息的空间将被省略。对于只包含了本地 CPU 代码的模块,头信息只包含本地 CPU 代码的信息。
CLR 头这些信息(被 CLR 解释执行)指示当前文件是个托管模块,头信息包含了需要的 CLR 版本信息,一些标志量,模块入口(Main 方法) 的 MethodDef 元数据 (metadata) ,以及模块元数据 (metadata) 的地址和大小, 资源,强命名,等等。
元数据(Metadata)每个托管模块都包含元数据(Metadata)表,这些表有两种主要类型:. There are two main types of tables:
一种用来描述源代码中的类型和成员,一种用来描述被你源代码参照引用的类型和成员
IL代码源代码被编译器编译后的产物。在运行的时候 CLR 编译器把这些 IL 代码转换成本地 CPU 指令

 

本地代码 (Native code) 编译器总是生成针对某一特定 CPU 构架的代码,例如 x86, x64, 或 ARM。而所有 CLR 兼容编译器生成 IL 代码。 IL 代码总是被称为托管代码,因为他的执行由 CLR 全权管理。

除了 IL 之外,针对 CLR 的编译器还需要把完整的元数据(metadata) 写入到托管模块 (managed module) 中,简要地来说元数据(metadata)是一组数据表,描述了“这个模块中定义了什么,什么类型阿,成员阿”。另外元数据(metadata)还记录了该模块的参照信息,包括参照类型以及它们的成员。元数据(metadata)可算作一些老技术(COM’s Type Libraries 以及 Interface Definition Language (IDL) 文件)的超集。这里需要注意的是 CLR 元数据(metadata) 本身并不完整,所以不像 Type Libraries 或 IDL一样,它总是与包含了IL代码的文件关联在一起,总是被包含在同一个EXE/DLL文件中(无法分割)。因为编译器同时生成元数据(metadata)和代码并把它们一起写入托管模块 (managed module),所以元数据(metadata)和IL代码彼此之间总是同步的。元数据(metadata)有许多应用场景,以下是经常遇到的:

■ 元数据(metadata)使得在编译时不再需要本地(native) C/C++ 头文件和库文件,因为所有的参照信息都已经包含在同一个文件中,编译器可以从托管模块 (managed module)中直接读取到
■ Microsoft Visual Studio 使用元数据(metadata)来帮助你编写代码。 IntelliSense 机能解析元数据(metadata)来告诉你某一个类型的成员方法,属性,事件,字段等等,或者罗列出某一个方法接受的参数
■ CLR 的代码检查处理会使用这些元数据来确保你的代码都是类型安全(type-safe)的。
■ 元数据使得对象的字段能够被序列化到内存块中,传送给另一台机器,并在该远程机上反序列化,重新构建该对象的状态
■ 元数据帮助垃圾回收器 (garbage collector) 来监视对象的生存期,垃圾回收器通过元数据可以获取对象的类型,并且获知哪些字段参照了其他的对象

Chapter 2, “Building, Packaging, Deploying, and Administering Applications and Types,”中会更详细的介绍元数据。
Microsoft 的 C#, Visual Basic, F#, 以及 IL Assembler 总是生成包含托管代码(IL) 以及托管数据 (garbage-collected 数据类型)的模块,终端用户也就必须在安装了 CLR
(包含在 .NET Framework 安装包中) 的机器上执行这些模块。这就好像你必须分别安装 Microsoft Foundation Class (MFC) 类库 或 Visual Basic 类库来运行 MFC 或 Visual Basic 6.0 程序一样。

缺省情况下 Microsoft 的 C++ 编译器把 EXE/DLL 模块编译成非托管(本地)代码,在其运行的时候对非托管的数据(本地内存)进行操作,这些模块的执行不需要CLR。 但是你可以在编译的命令行中追加 /CLR 开关量,C++ 编译器将生成包含托管代码的模块,这是它的执行将依赖 CLR。根据所有 Microsoft 编译器的描述,C++ 是唯一一个允许开发者在同一模块中同时包含托管与非托管代码的编译器,也是唯一一个允许在源代码中同时定义托管与非托管源代码的编译器。Microsoft 的 C++ 编译器提供的灵活性是独一无二的,它允许你在任何你觉得合适的场合在托管代码中使用既有的本地 C/C++ 代码。

网神 SecGate 3600 防火墙 app_av_import_save文件上传漏洞(含批量验证poc) 阅读详情

相关推荐

48V电动车电池包拆解:硬核入门BMS硬件设计与故障排查

BMS(电池管理系统)是锂电应用的核心安全与性能保障模块,其本质是融合电化学、模拟电路、嵌入式控制与热管理的交叉系统。理解BMS不能止步于SOC算法或通信协议,而需回归硬件本体——从电压采样精度、MOSFET驱动时序、被动均衡散热设计到NTC热耦合布局,每一处物理实现都直接决定系统可靠性。48V平台因兼具安全性(<60V ELV)、复杂度(13–14串)与产业普及性,成为BMS工程实践的理想标本。本文聚焦真实电池包中的PCB级设计缺陷识别、关键参数现场验证(如±5mV采样误差、5mΩ导通内阻)、UART协议

weixin_29191081的博客 232

7.C#:PE文件,程序集,托管模块,元数据——还是那个Hello world

第一部分: 本文来自:http://www.cnblogs.com/vvjiang/p/5229545.html 好了,还是这张图,还是一样的Hello world。 因为本章其实很多都是讲一些命令行编译啊什么鬼的配置类的东西,要用的时候直接百度或者回头查书就可以了, 所以了解一下也就行了,也没有记录下来,接下来讲得只是我认为很有用的东西。 关于引用 请看上图,MyTest

xushaozhang的专栏 3925

Golang面试(一)莉莉丝游戏-Golang后端开发-中台部门

莉莉丝游戏-Golang后端开发-中台部门 开场白,双方自我介绍,对方介绍这个岗位情况,erlang语言,全部转向go。 聊项目,介绍IM架构以及使用Go写的服务简介 动态扩容相关问题:平常30万,现在100万,你们现在是如何应对的? 如果让你调整架构实现动态扩容,你会怎么做?回答了kafka,是一种,应该还要使用docker和k8s以及微服务框架等 如果使用kafka,你是如何确保消息有序?回答了redis,好像没回答到那个点 消息发送失败的问题,如何做到消息不丢?回答持久化存储、拉消息和ACK 发送失

xmcy001122的专栏 3898

[Clr via C#读书笔记]Cp1CLR执行模型

Cp1CLR执行模型 本章的概念点 CLR=Common Language Runtime 内存管理,程序集加载,安全性,异常处理和线程同步、CLR是基础,支持着面向它的各种语言。各种语言会被对应的编译器转换为托管模块。 不同语言有各自的优点和不足。 在需要托管程序运行的电脑上必须安装CLR(.NET Framework). 托管模块managed module PE32,PE32+=...

diawuzi7244的博客 167

从理论到板级:FOC电机驱动硬件电路全链路设计解析

本文从硬件工程师视角,深度解析FOC电机驱动从理论到板级实现的全链路设计。重点剖析了电源保护、核心采样电路、三相逆变桥与驱动电路等关键硬件模块的设计要点与实战经验,强调硬件是FOC算法可靠运行的基石,并提供了PCB布局布线的核心原则,帮助开发者构建高性能、高可靠性的电机驱动硬件平台。

weixin_29240711的博客 332

STM32实战:5分钟搞定CanFestival协议栈下的CANopen心跳报文配置(附避坑指南)

本文详细介绍了如何在STM32平台上使用CanFestival协议栈快速配置CANopen心跳报文,包括硬件准备、协议栈移植、心跳报文配置及常见问题解决方案。通过实战步骤和避坑指南,帮助开发者高效实现节点状态监控,提升工业控制系统的可靠性。

win55的博客 744

CLR via C# 读书笔记1-7

通用类型系统 Common Type System (CTS) CLR 中的各种类型扮演了最终要的角色,它们决定了一种程序语言与另一种程序语言交互的机制。基于此点 Microsoft 建立一个规范—通用类型系统 Common Type System (CTS)—它描述了类型怎样定义及行为。 PS: Microsoft 已经向 ECMA 提交了 CTS (连同 .NET Framework 中的

sqlchen的专栏 820

AI 大模型在电商精准营销中的应用

例如,对于用户 A 和用户 B,通过比较他们对共同评价过的商品的评分差异来确定相似度。其中,(Gain(D,a))表示特征(a)对数据集(D)的信息增益,(Ent(D))表示数据集(D)的信息熵,(V)表示特征(a)的取值个数,(D^{v})表示特征(a)取值为(v)的样本子集。其中,(sim(A,B))表示用户 A 和用户 B 的相似度,(I)表示用户 A 和用户 B 共同评价过的商品集合,(R_{A,i})和(R_{B,i})分别表示用户 A 和用户 B 对商品(i)的评分。(三)营销活动效果预测。

alittlehippo的博客 1627

CLR via C# 读书笔记1-8

通用语言规范 Common Language Specification CLR 继承了多种语言,并允许不同语言之间的对象能互操作,这是因为 CLR 建立了一套类型,metadata (自描述), 以及通用运行环境的标准。 但是不同的语言之间差异还是相当大,比如有的区分大小写,有的却不;有的支持有的 unsigned 整形值, 运算符重载, 可变的参数数目等等,有的却不。 Microsoft

sqlchen的专栏 901

Linux性能调优之CPU时间分布(亲和性、带宽、权重)配置

带宽权重亲和性进程级别Cgroup-v2服务级别systyemd我所渴求的,無非是將心中脫穎語出的本性付諸生活,為何竟如此艱難呢 ------赫尔曼·黑塞《德米安》

山河已无恙 1710

结构函数分析与 JESD51-14 标准详解

结构函数(Structure Function)是将器件瞬态热响应曲线(冷却曲线)通过数学变换,转换为热阻(Rth)与热容(Cth)沿热流路径一维分布的图形化分析方法。它能“看到”热量从结(Junction)到壳(Case)或环境的过程中,经过每一层结构时的热学特性。

专注于前沿技术的探索与实践,热衷于从代码逻辑、架构设计到行业应用等多维度深挖技术本质。期待在技术之路上与你共同成长~ 57

CLR via C# 读书笔记1-4

运行程序集代码 托管程序集由 metadata 和 IL 组成,IL 是一种不依赖 CPU 的机器语言,相对大多数的 CPU 机器语言来说,它属于高级语言。它可以建立/初始化对象,调用虚拟方法,直接操作数组,甚至进行错误捕获等,你可以把它看作一种面向对象的机器语言。 IL 与其他机器语言一样可以被写成程序集语言 (assembly language),Microsoft 提供了两个工具 ILA

sqlchen的专栏 751

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

CLR via C# 读书笔记1-9

与非托管代码的互操作 CLR 提供3种与非托管代码的交互方案: ■ 托管代码通过使用 P/Invoke 机制 来调用DLL文件中的非托管函数 许多 FCL 中定义的类型内部都有调用到 Kernel32.dll, User32.dll 等等文件中的函数。同时许多程序语言会提供托管代码调用非托管代码的简便途径,比如 C# 程序能够直接调用 从Kernel32.dll 导出的 CreateSema

sqlchen的专栏 721

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

《CLR via C#》读书笔记1 之 CLR的执行模型

1.将源代码编译成托管模块 托管模块是一个标准的32位microsoft windows可移植执行体(PE32)文件或者是一个标准的64位Windows可移植执行体(PE32+)文件,他们都需要CLR才能执行。 2.将托管模块合并成程序集 3.加载公共语言运行时 4.执行程序集的代码 IL可视为面向对象的机器语言。Microsoft提供了一个名为ILAsm.exe的IL汇...

weixin_34133829的博客 82

CLR via C# 读书笔记1-3

载入 Common Language Runtime CLR 负责托管代码的执行,所以在运行的机器上必须安装有.NET Framework。可以通过在 %SystemRoot%\System32 目录中是否存在 MSCorEE.dll 文件来判断.NET Framework 是否已经安装。特殊情况同一台机器上可能安装了多个版本的.NET Framework,你可以瞧一下这两个目录: %Syst

sqlchen的专栏 774

CLR via C# 读书笔记1-5

本地代码生成器: NGen.exe NGen.exe 能把 IL 代码变异为本地代码,这使得在运行时 CLR 的 JIT 编译器不需要在运行时编译 IL 代码从而提高运行效率。NGen.exe 适用以下两个场景: ■ 提高程序的启动速度 ■ 降低程序的 working set (当你的程序集会被多个进程适用的时候)  NGen.exe 有这个作用的原因是它把编译后的本地代码存放在一个独立文

sqlchen的专栏 809

CLR via C# 读书笔记1-2

托管模块集成在程序集(Assemblies)中 CLR 实际上并不处理模块,它处理程序集。程序集是一个或多个模块/资源文件的集合,也是最小的可复用,安全性,版本化的最小单位。根据你选择的编译器,你可以生成一个或多个程序集。在 CLR 的概念中,这称之为组件(component)。 插图 1-2 将帮助你理解程序集到底是什么。托管模块和资源文件经过一个工具的处理集成为程序集,这个工具生成一个 P

sqlchen的专栏 634

CLR via C# 读书笔记1-4 追记

IL 的验证 IL 提升了程序的强壮性和安全性,当IL 转换成本地 CPU 指令时, CLR 会进行一个验证的处理。这个验证处理保证了 IL 代码所干的事情是安全的。比如:每个被调用方法的参数是匹配的,返回值被正确使用,函数结尾有 return 语句等等。 在 Windows 中每个进程都有其自己的虚拟地址空间,这样设计的初衷是防止一个进程错误的读写到另一个进程的内存空间而引起的安全性问题。

sqlchen的专栏 821

《CLR via C#》读书笔记(1)CLR执行模型

1.1释义CLR公共语音运行时Common Language RuntimeCTS通用类型系统Common Type SystemCTS、CLS是CLR的核心CLS通用语言规范Common Language SpecificationCLS是CTS的子集IL托管代码栈COM类型库Type LibraryIDL接口定义语音Interface Definition LanguageFCLFrameWo...

weixin_34418883的博客 122

读书笔记—CLR via C#章节1-2

这本书这几年零零散散读过两三遍了,作为经典书籍,应该重复读反复读,既然我现在开始写博了,我也准备把以前觉得经典的好书重读细读一遍,并且将笔记整理到博客中,好记性不如烂笔头,同时也在写的过程中也可以加深自己理解的深度,当然同时也和技术社区的朋友们共享。 程序集 描述:一个或多个类型定义文件及资源文件的集合 特征:可重用、可保护、可版本控制的单元 生成:可通过C#编译器(或其他编译器)或A...

weixin_34038652的博客 111

CLR via C# 读书笔记2-1

.NET Framework 开发的目标 原先的Windows程序有以下3个不足: 采用的 dynamic-link libraries (DLLs) 方式在升级后经常对已有程序造成影响,被戏称为 “DLL hell”。 安装一个程序的时候总是会影响到整个系统(比如:目录,注册表,快捷方式等等),这使得一个程序并不是一个单独的个体,从而无法简便的备份该程序也无法简单地从一台电脑迁移到另一台

sqlchen的专栏 673

《CLR via C# 》读书笔记(1) -- .Net程序是如何生成的

说到.NET基础,我觉得应该首先应该要知道一组概念,我觉得作为.NET程序员,这应该算是常识。有可能我目前的理解也不算正确,希望能在以后的积累中逐步完善。CLR- CLR (Common Language Runtime)它为.NET Application提供一个运行时的环境。毕竟.NET程序和普通的Windows应用程序(比如说用C++开发的程序)运行方式是不一样的。在...

Sinolife0605的博客 244

CLR via C# 3 读书笔记(3):第1章 CLR执行模型 — 1.3 加载CLR

程序集或者是一个可执行的应用程序,或者是一个包含一组类型的DLL,这些类型供可执行的应用程序使用。CLR负责管理包含在这些程序集中的代码的执行。这意味着主机上必须安装.NET Framework。 如果机器上安装了.NET Framework,则在%SystemRoot%\System32目录下将包含MSCorEE.dll文件。一台机器上可以同时安装多个.NET Framework版本。使用下面这...

weixin_30659829的博客 116

CLR via C# 读书笔记1-6

.NET Framework 类库 .NET Framework 类库 (FCL),以及Microsoft 提供的其他类库(Windows Azure SDK, DirectX SDK 等)都包含了许许多多的类型,帮助开发者更便捷地建立各种类型的程序集: ■ Web services ■ Web Forms/基于MVC HTML 的应用程序 (网站) ■ Windows GUI 程序

sqlchen的专栏 759

《CLR via C#》第23章 执行异步调用 读书笔记 part1

 CLR如何使用Windows线程CLR使用Windows线程的功能。但CLR有权把CLR中的线程与Windows线程分开,在某些确定的情况下,CLR的线程并不精确地映射到Windows线程。例如,主机可以告诉CLR把每个CLR线程表现为Windows的纤程。未来版本的CLR还可能仅使用一个已存在的线程,即使你明确地要求它创建一个新线程时也这么干。另外,未来版本的CLR可能

小徐的专栏 782

CLR via C# 读书笔记 1-2 创建线程的成本

在clr中创建线程的代价还是比较高的 ,他需要两个部分 内存: 线程核心对象, 存放描述线程的一些内容和上下文 . (内存消耗:700B-2500B)线程环境,存放例如异常处理链之类. (内存消耗 1Page  4k-8k)用户模式堆栈, 存放 参数 变量等  ,这也就是平时我们说的堆栈和堆的区别中的堆栈  (内存消耗:1MB)核心模式堆栈, (内存消耗12KB-24KB) 基本

bytxl的专栏 762
上一篇: 在 Visual Studio 中调试 MSBuild 脚本
下一篇: CLR via C# 读书笔记1-2
sqlchen
博客等级 码龄24年 10粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值