A. 描述一般的编译程序可分为哪些阶段,每个阶段的目的是什么
其目的是保证标识符和常数的正确使用,把必要的信息...综合部分 综合阶段必须根据符号表和中间语言程序产生...目标程序质量,也可以把一个逻辑步骤的工作分为几遍.
B. 请教C++模板函数在编译时处理
模板函数类型检查是放在调用的时候检查的.因为在定义的时候是没有办法区分的(比如你这个例子,就存在int转换float和float转换int的警告级别差异.)
所以严格的说来,编译器是发现调用了test(v1,u1),才开始检查的.由于底层实现将形参类型用实际V1和u1的类型做了替换,然后就可以实际判断隐式转换的合理性.
C. 请问 c++中 模板是 编译时多态还是运行时多态,或者都不是,求解
是编译时多态。所有的模板都是在编译时产生对应的代码,它没有面向对象中的虚表,无法实现动态多态。
你仔细想一想,模板在应用时都必须指定确定的类型,而运行多态仅需指定一个基类就OK啦。
D. C# 类的实例化是在 编译时 还是 运行时发生的
同上,正确答案是在运行时,
NET程序在编译的时候是由编译器把C#代码转换成MSIL(微软中间代码),此时仅仅是对代码进行了修改
在程序第一次运行的时候CLR(公共语言运行时)根据本地硬件特征编译生成最优化的二进制文件,存放在C盘对应版本的NET的缓存中,
之后才会调用CPU执行,执行的时候,如果遇到new关键字,才会在内存中实例化对象开辟空间
也就是说,在程序没有执行之前,代码还是代码,new都没有调用
E. C语言源程序的编译过程包括哪三个阶段
编译:将源程序转换为扩展名为.obj的二进制代码
连接:将obj文件进行连接,加入库函数等生成可执行文件
运行:执行可执行文件,有错返回修改,无错结束
F. 编译的目标代码
目标代码生成是编译的最后一个阶段。目标代码生成器把语法分析后或优化后的中间代码变换成目标代码。目标代码有三种形式:
① 可以立即执行的机器语言代码,所有地址都重定位;
② 待装配的机器语言模块,当需要执行时,由连接装入程序把它们和某些运行程序连接起来,转换成能执行的机器语言代码;
③ 汇编语言代码,须经过汇编程序汇编后,成为可执行的机器语言代码。
目标代码生成阶段应考虑直接影响到目标代码速度的三个问题:一是如何生成较短的目标代码;二是如何充分利用计算机中的寄存器,减少目标代码访问存储单元的次数;三是如何充分利用计算机指令系统的特点,以提高目标代码的质量。
G. 生成码是什么意思
生成码就是编译后生成的一串代码。
目标代码生成是编译的最后一个阶段。目标代码生成器把语法分析后或优化后的中间代码变换成目标代码。
目标代码(object code)指计算机科学中编译器或汇编器处理源代码后所生成的代码,它一般由机器代码或接近于机器语言的代码组成。
简介
如果编译过程中发现源程序有错误,编译程序应报告错误的性质和错误的发生的地点,并且将错误所造成的影响限制在尽可能小的范围内,使得源程序的其余部分能继续被编译下去,有些编译程序还能自动纠正错误,这些工作由错误处理程序完成。
H. 程序在 编译期,链接期,运行期各执行哪些操作
参考一下:
源文件的编译过程包含两个主要阶段,而它们之间的转换是自动的。第一个阶段是预处理阶段,在正式的编译阶段之前进行。预处理阶段将根据已放置在文件中的预处理指令来修改源文件的内容。#include指令就是一个预处理指令,它把头文件的内容添加到.cpp文件中还有其他许多预处理指令
这个在编译之前修改源文件的方式提供了很大的灵活性,以适应不同的计算机和操作系统环境的限制。一个环境需要的代码跟另一个环境所需的代码可能有所不同,因为可用的硬件或操作系统是不同的。在许多情况下,可以把用于不同环境的代码放在同一个文件中,再在预处理阶段修改代码,使之适应当前的环境。
预处理器显示为一个独立的操作,但一般不能独立于编译器来执行这个操作。调用编译器会自动执行预处理过程,之后才编译代码。
编译器为给定源文件输出的是机器码,执行这个过程需要较长时间。在对象文件之间并没有建立任何连接。对应于某个源文件的对象文件包含在其他源文件中定义的函数引用或其他指定项的引用,而这些函数或项仍没有被解析。同样,也没有建立同库函数的链接。实际上,这些函数的代码并不是文件的一部分。这些工作是由链接程序(有时称为链接编辑器)完成的
链接程序把所有对象文件中的机器码组合在一起,并解析它们之间的交叉引用。它还集成了对象模块所使用的库函数的代码。这是链接程序的一种简化表示,因为这里假定在可执行模块中,模块之间的所有链接都是静态建立的。实际上有些链接是动态的,即这些链接是在程序执行时建立的。
链接程序静态地建立函数之间的链接,即在程序执行之前建立组成程序的源文件中所包含的函数链接。动态建立的函数之间的链接(在程序执行过程中建立的链接)将函数编译并链接起来,创建另一种可执行模块—— 动态链接库或共享库。动态链接库中的函数链接是在程序调用函数时才建立的,在程序调用之前,该链接是不存在的。
动态链接库有几个重要的优点。一个主要的优点是动态链接库中的函数可以在几个并行执行的程序之间共享,这将节省相同函数占用的内存空间。另一个优点是动态链接库在调用其中的函数之前是不会加载到内存中的。也就是说,如果不使用给定动态链接库中的函数,该动态链接库就不会占用内存空间