Ⅰ C#源代码编译成为本地代码的编译过程
很有兴趣的话,可以去阅读下JeffreyRitchie的《ClrviaC#》,目前出到第三版,英文好的话强烈推荐看英文版的,而且我有该电子书和实体书。
下面讲下我的理解:大致上不会出什么差错的,细节部分你可以参照上面的书籍!
1.首先,c#源码经过c#编译器被编译成托管模块(IL中间代码、元数据(Metadata))
2.然后,使用C#编译器以及程序集链接器(AssemblyLinker----AL.exe)将上述托管模块以及项目的资源文件Combine(整合)成一个程序集(Assembly)
上述程序集就是你所看到的exe文件或者dll文件等等,程序集中包含了manifest描述文件,是该程序集内容以及关系的一个清单,具体的内容你可以参见JR的书跟Java中的类似!
双击该exe运行的时候:
3.最后,运行时,CLR装载对应的程序集,使用内部的三个即时编译器(常用的为JIT),再去根据本机的环境去进行相应的优化(针对CPU优化等等),即时的翻译成本地机器指令去执行。
还有一个本地化代码生成工具,NGen.exe~~
这个最好能去看看那本JR的神作!细节不是我三言两语能讲清的~~
Ⅱ 如何编译C语言源代码
下载一个VC2005软件,把代码复制到里面,设置好C运行环境,点击编译,OK,然后点击那个感叹号,直接链接运行,就OK了。
Ⅲ 编译器的工作原理
编译 是从源代码(通常为高级语言)到能直接被计算机或虚拟机执行的目标代码(通常为低级语言或机器语言)的翻译过程。然而,也存在从低级语言到高级语言的编译器,这类编译器中用来从由高级语言生成的低级语言代码重新生成高级语言代码的又被叫做反编译器。也有从一种高级语言生成另一种高级语言的编译器,或者生成一种需要进一步处理的的中间代码的编译器(又叫级联)。
典型的编译器输出是由包含入口点的名字和地址, 以及外部调用(到不在这个目标文件中的函数调用)的机器代码所组成的目标文件。一组目标文件,不必是同一编译器产生,但使用的编译器必需采用同样的输出格式,可以链接在一起并生成可以由用户直接执行的EXE,
所以我们电脑上的文件都是经过编译后的文件。
Ⅳ 源代码是如何运行的
方法和详细的操作步骤如下:
1、第一步,打开任意网站,然后根据需要进行选择,见下图,转到下面的步骤。
Ⅳ 可否谈一下C++编译器大致是如何把C++源代码编译成目标代码的
大致分成以下几个阶段:并以以Linux下的GCC编译器举例
第一阶段:预处理,这个阶段处理宏等
第二阶段:编译,包括语法检查,头文件检查等
g++ -c name.o name.cpp name.h 生成目标文件
第三阶段:链接,包括静态链接与动态链接
g++ -o name name.o 生成汇编文件,可以直接运行
Ⅵ 如何用编译器将自己的源代码转换成目标代码
我们使用编译器将自己的源代码转换成目标代码,
使用链接器将我们的目标代码链接成一个可执行程序。另外,
我们使用一些程序在计算机中输入源代码文本并且编辑它。这些是最初的和最重要的工具,
它们构成程序员的工具集合或“程序开发环境”。
如果你使用的是命令行窗口,
就像很多专业程序员所做的那样,
你将不得不自己来编写编译和链接命令。如果你使用IDE(“交互式开发环境”或“集成式开发环境”),
就像很多程序员所做的那样,
简单地点击正确按钮就可以完成这个工作。附录C介绍了如何在你的C++实现中编译和链接。
IDE通常包括一个具有有用特性的编辑器,
例如用不同颜色的代码来区分你的源代码中的注释、
关键字和其他部分,
以及其他帮助你来调试代码、
编译和运行代码的功能。调试是发现程序中的错误和排除错误的活动,
你在前进的道路上会听到很多有关它的内容。
我们使用微软的Visual
C++作?喑炭
⒒肪呈道
H绻
颐羌虻サ厮怠氨嘁肫鳌被蚴恰癐DE”的某些部分,
那就是所指Visual
C++系统。但是,
你可以使用一些提供最新的、
符合标准的C++实现的系统。我们所说的大多数内容(经过微小的修改)对所有的C++实现都将是正确的,
并且其代码可以在任何地方运行。在工作中,
我们使用几种不同的实现。
Ⅶ 简述将源程序编译成可执行程序的过程
一个源程序到一个可执行程序的过程:预编译、编译、汇编、链接。其中,编译是主要部分,其中又分为六个部分:词法分析、语法分析、语义分析、中间代码生成、目标代码生成和优化。
预编译:主要处理源代码文件中的以“#”开头的预编译指令。处理规则如下:
1、删除所有的#define,展开所有的宏定义。
2、处理所有的条件预编译指令,如“#if”、“#endif”、“#ifdef”、“#elif”和“#else”。
3、处理“#include”预编译指令,将文件内容替换到它的位置,这个过程是递归进行的,文件中包含其他文件。
4、删除所有的注释,“//”和“/**/”。
5、保留所有的#pragma 编译器指令,编译器需要用到他们,如:#pragma once 是为了防止有文件被重复引用。
6、添加行号和文件标识,便于编译时编译器产生调试用的行号信息,和编译时产生编译错误或警告是能够显示行号。
(7)编译器处理源代码扩展阅读:
编译过程中语法分析器只是完成了对表达式语法层面的分析,语义分析器则对表达式是否有意义进行判断,其分析的语义是静态语义——在编译期能分期的语义,相对应的动态语义是在运行期才能确定的语义。
其中,静态语义通常包括:声明和类型的匹配,类型的转换,那么语义分析就会对这些方面进行检查,例如将一个int型赋值给int*型时,语义分析程序会发现这个类型不匹配,编译器就会报错。