编译器是如何运作的

1.1 编译器是如何运作的(1)

大多数程序员在日常编程中很少会直接用到CPU 中的指令(即机器语言)。这主要是因为直接使用机器语言比较繁琐,所以我们选择人类更容易理解的语言来编程,然后再通过编译器将其翻译成机器语言。但是,编译器能否准确地将人类的逻辑思维转换为相应的机器语言呢?在这里,我们先来研究一下编译器到底是如何运作的。

比如,使用GCC按以下步骤将程序编译为目标代码(即汇编语言程序)。

1. 读取源程序并进行解析。将字符分离出来整理成较容易统计的形式,收集参数与函数名等标识符。

2. 对收集到的参数与标识符进行内存地址分配(即后文将提到的寄存器),将内存地址与参数或函数对应起来。

3. 根据逻辑程序生成汇编语言程序。

接下来,汇编编译器将已生成的汇编语言转换成机器语言的目标程序,链接器将目标程序和外部模块连接起来(图1-2)。

 
(点击查看大图)图1-2 从源程序到执行代码的实现过程

近代的编译器实现了在编译过程中,让所生成的程序在更短的时间内得到相同的结果,达到更高的效率。其实现的方法多种多样,比如说,编译器扫描程序后,将多余的操作忽略,修改指令的运行顺序以使CPU 处理得更快等。

优化与程序的调优有着密不可分的关联,在后面的章节中将会提到。

编译后的汇编语言程序

我们来看看由GCC 生成的汇编语言程序。程序1-1 是为检验而编写的小程序。

程序1-1 10 次加1 运算的程序

 
 
 
  1. #include <stdio.h> 
  2. int a, b;  
  3. main()  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值