原文:[CLR via C#]1.1 将源代码编译成托管代码

1. 公共语言运行时(Common Language Runtime,CLR)是一种可由多种编程语言使用的"运行时"。

2. CLR的核心功能(比如内存管理,程序集加载、安全性、异常处理和线程同步等)可由面向CLR的所有语言使用。

3. 用一个对应的编译器编译源代码之后,结果都是一个托管模块
4. 托管模块是一个标准的32/64位Microsoft Windows 可移植执行体(PE32/PE32+)文件,它们都需要CLR才能执行。
 
5. 托管的程序集利用Windows的数据执行保护地址空间布局随机化增强整个系统的安全性。
 
6. 托管模块的各个组成部分
 
7. 本地代码编译器生成的是面向特定CPU架构(比如x86、x64和IA64)的代码。
 
8. 每个面向CLR的编译器生成的都是IL(中间语言)代码。IL有时称为托管代码,因为CLR要管理它的执行。除了生成IL,面向CLR的每个编译器还要在每个托管模块中生成完整的元数据。
 
9.  元数据是一组数据表。其中一些数据表描述了模块中定义的内容,比如类型及其成员。还有一些元数据表描述了托管模块引用的内容,比如导入的类型及其成员。元数据总是与包含IL代码的文件关联。事实上,元数据总是嵌入和IL代码相同的EXE/DLL文件中,两者密不可分。
 
10.  元数据的用途
  • 编译时,元数据消除了对本地C/C++头和库文件的需求,因为在负责实现类型/成员的IL代码文件中,已包含和引用的类型/成员有关的全部信息。编译器可直接从托管代码中读取元数据。
  • Visual Studio 使用元数据帮你写代码。它的"智能感知"技术可以解析元数据。
  • CLR的代码验证过程使用元数据确保代码执行“类型安全”的操作。
    ......

[CLR via C#]1.1 将源代码编译成托管代码的更多相关文章

  1. .NET Framwork 之 源代码编译成托管代码托管代码合并成程序集

    我们都知道,C#程序需要在 .NET Framework 的环境中运行. 一.程序运行所需的三个关键 1.IL(中间语言):编译器编译源代码时生成的代码. 2. Framework类库(Framewo ...

  2. 【CLR via C#】CSC将源代码编译成托管模块

    下图展示了编译源代码文件的过程.如图所示,可用支持 CLR 的任何一种语言创建源代码文件.然后,用一个对应的编译器检查语法和分析源代码.无论选用哪一个编译器,结果都是一个托管模块(managedmod ...

  3. C++ 编译器用于把源代码编译成最终的可执行程序

    C++ 编译器写在源文件中的源代码是人类可读的源.它需要"编译",转为机器语言,这样 CPU 可以按给定指令执行程序. C++ 编译器用于把源代码编译成最终的可执行程序. 大多数的 ...

  4. 通过maven命令将源代码编译成jar到本地仓库

    图: 4.2.3        采用maven命令编译成jar安装到本地maven库 在路径框输入cmd,执行命令: mvn clean install 图: 图2 成功后可以看到jar包

  5. 源代码编译安装Python3.5.2

    由于没有找到Python3.5的rpm安装包,因此进行源代码编译安装 1.下载Python3.5.2 [root@seastar ~]# cd /usr/local/src [root@seastar ...

  6. Android 6.0 源代码编译实践

    http://www.judymax.com/archives/1087 Android 6.0 源代码编译实践 https://mirrors.tuna.tsinghua.edu.cn/help/A ...

  7. Nginx+Php-fpm+MySQL+Redis源代码编译安装指南

    说明:本教程主要包括以下三个部分: 1. 源代码编译安装Nginx 2. 源代码编译安装php以及mysql.redis扩展模块 3. 配置虚拟主机 文中所涉及安装包程序均提供下载链接,欢迎使用 运行 ...

  8. 3DSlicer源代码编译过程vs2008+windows xp [转]

    一 下载QT源代码编译 1.  简述   在 Windows2000/xp/vista 下,安装 VS2008, QT 4.7.2 :并在 VS2008上建立 QT 的集成开发环境,利用 VS2008 ...

  9. 【转】Android源代码编译命令m/mm/mmm/make分析--不错

    原文网址:http://blog.csdn.net/luoshengyang/article/details/19023609 在前文中,我们分析了Android编译环境的初始化过程.Android编 ...

随机推荐

  1. Android-管理Activity生命周期 -重新创建Activity

    按照正常的app行为,很少情况下activity会销毁,只有当用户点击了返回按钮或者activity通过调用finish()发出销毁信号.系统也有可能销毁activity如果它是停止状态并且很久没有使 ...

  2. MapReduce源代码分析MapTask分析

    前言 MapReduce该分析是基于源代码Hadoop1.2.1代码分析进行的基础上. 该章节会分析在MapTask端的详细处理流程以及MapOutputCollector是怎样处理map之后的col ...

  3. 终结者单身——setAccessible(true)

    首先看一下"传说"Singleton模式 package go.derek; public class Singleton{ public static int times; pr ...

  4. VS2015在对GIT的支持

    VS2015在对GIT的支持 相比VS2013,VS2015在对GIT的支持上有了更强大的支持.本篇仅作抛砖引玉,不做过多介绍: 1. 打开VS 2015起始页 2. 打开团队资源管理器 打开[本地G ...

  5. Apple Watch开发了一些细节和总结

    本文旨在总结最近Watch在发展中遇到的问题和细节 1.左右Watch真机调试问题 一般的情况下,你为IOS主应用创建了一个extention,比方说Today Extension .Xcode都会自 ...

  6. 使用shell/python获取hostname/fqdn释疑(转)

    一直以来被Linux的hostname和fqdn(Fully Qualified Domain Name)困惑了好久,今天专门抽时间把它们的使用细节弄清了. 一.设置hostname/fqdn 在Li ...

  7. Java版网络爬虫基础(转)

    网络爬虫不仅仅可以爬取网站的网页,图片,甚至可以实现抢票功能,网上抢购,机票查询等.这几天看了点基础,记录下来. 网页的关系可以看做是一张很大的图,图的遍历可以分为深度优先和广度优先.网络爬虫采取的广 ...

  8. 编写高质量JavaScript代码绳之以法(The Essentials of Writing High Quality JavaScript)翻译

    原文:The Essentials of Writing High Quality JavaScript 才华横溢的Stoyan Stefanov,在他写的由O'Reilly初版的新书<Java ...

  9. 安装Docker

    安装Docker 1. 增加Repository配置文件 cat >/etc/yum.repos.d/docker.repo <<-EOF [dockerrepo]name=Dock ...

  10. EXCEL 两人的建立Y轴

    在本文中,EXCEL2013基于,操作的其他版本基本上相同模式 原始数据和最后的结果如下面的: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvanloX2p ...