预处理编译汇编链接

原因:今天生成工程文件时突然发现有些细节忘却,故在此做一记录

概况:编译过程就是把文本形式源代码翻译成机器语言形式的目标文件的过程,链接过程就是把目标文件和用到的库文件进行组织形成最终可执行代码的过程。

 

编译过程分为:编译和汇编,而编译又可以分为预处理阶段和编译阶段。

预处理阶段:将根据已放置在文件中的预处理指令来修改源文件的内容,比如#include指令,它把头文件的内容添加到cpp文件中.主要涉及到的处理有

1:宏定义指令,如#define a b 

2:条件编译指令,如#ifdef,#inndef等

3:头文件指令,如#include等

4:特殊符号,如LINE,_FUNCTION_等.

预处理所完成的基本上是对源程序的替代工作,经过此环节,生成了一个没有宏定义,没有条件编译,没有特殊符号的输出文件。

 

编译:主要工作为词法分析和语法分析,在确认所有的指令都符合语法规则后,将其翻译成等价的中间代码,此时文件中只有常量,如数字,字符串,变量的定义以及c语言的关键字如if,else等。还会涉及到一些优化工作。

 

汇编:把汇编语言代码翻译成目标机器指令的过程,目标文件中存放的也就是与源程序等效的机器语言代码,一般至少包含两个段,代码段:该段中包含程序的指令,只可读不可写。数据段:主要存放程序中用到的各种全局变量或静态数据,一般可写可读。

 

链接:主要工作就是将有关的目标文件彼此相连,将一个文件中所引用的符号同该符号在另外一个文件中的定义连接起来,比如程序中调用某个库文件中的方法等。链接处理分为静态链接和动态链接,静态链接所使用到的函数代码将会从所在的静态链接库中拷贝到最终可执行的程序中,其中每个文件都会包含库中的函数代码。动态链接:函数的代码存放到某个动态链接库目标文件中,链接程序此时所做的只是在最终的可执行程序记录下共享对象的名字以及其他少量信息,运行时动态链接库的全部内容被映射到运行时相应进程的虚地址空间,动态链接程序根据记录的信息找到对应的函数代码.所以使用动态链接库将会让可执行程序减少体积,并且共享对象被多个进程使用时节约内存。

根据不同阶段又可以分为运行时多态和编译时多态。其中主要代表为:模块的定位发生在编译时,而虚函数的定位发生在运行时。由于运行期间进虚函数绑定,提高了程序的运行开销,且由于在运行期确定,所以编译器无法进行优化。编译时多台程序的可读性降低,且编译时间耗时。

 

总结:通过上述分析,可以很明确的知道了编译器运行环节。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值