《深入理解计算机系统》即CSAPP读书笔记系列——第一章 计算机系统旅行之C语言编译过程

    正如题目展示,第一章的主题是“计算机系统展示”(A Tour of Computer Systems)。第一章站在宏观却不失条理角度来讲解程序是怎么跑起来的。实例程序1.1如下所示:

#include<stdio.h>
int main()
{
   printf("hello world");
   return 0;
}

该程序在执行后输出的是“hello world”。可是计算机是怎么理解程序的呢?或者计算机是如何理解上述的程序语言呢?

这是一个十分有趣的过程,不过在这里展开。篇幅为庞大。今天先讲解的为一个C程序的编译过程(The compilation system)。下为流程图:


  接下来逐步分析该流程图:

  •  hello.c输入是程序文件输入,也就是实例程序1.1.
  • Pre-processor(cpp):预处理器。顾名思义:也就是对程序进行预处理。C程序中特指“”#“”包含的库文件。预处理器将库文件直接导入到源代码中,此例就是将头文件“stdio.h”导入到源程序中,生成hello.i源代码。
  • Complier:将hello.i 翻译为汇编语言。生成hello.s
  • Assembly phase:将汇编语言转化为机器指令(The Assembler translates hello.s into machine-language instructions)。生成二进制文件——hello.o。
  • Linker:链接器:实例程序1.1使用了标准C语言库中的printf 函数。而printf的源码编译文件为printf.o,此时此时并不在hello.o中。而链接器的作用就是将printf.o导入到hello.o中。进而生成一个可执行的二进制文件!
   自此 ,本篇博文结束。如有问题,请各位不吝指教,本人不盛感激。 大笑  


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大锤爱编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值