helloworld背后发生了什么?(CSAPP笔记2)

任何一个学过C语言的同学,第一个程序应该都是写一个“hello world“。

我们编辑好一个hello world,一般来说,只需要轻轻一点编译器的“编译”“运行”,屏幕上就会出现一句hello world,然而在这背后都发生了什么?

CSAPP在第一章给出了解释:

这里写图片描述

计算机需要将源文件转为可执行目标文件,一般在Linux下,需要执行gcc hello.c -o hello从而生成一个hello可执行文件,这样的翻译过程分为四个阶段:预处理, 编译,汇编和链接,如上图所示。

接下来我们简单模拟这个过程:

首先是我们自己编辑好一个源程序,得到一个hello.c文件

这里写图片描述

接下来,进入预处理阶段,在Linux下,我们输入gcc -E hello.c -o hello.i得到一个源程序文本,在预处理阶段一般都是宏替换,读取头文件,删除注释等等操作

下面开始进行编译,我们输入gcc -E hello.c -o hello.i得到一个汇编程序文本,我们vim hello.s发现全是汇编代码

这里写图片描述

接下来是汇编阶段,汇编器将hello.s翻译为机器语言,我们输入gcc -c hello.s -o hello.o得到一个二进制文件hello.o

这里写图片描述

最后就是链接阶段了,我们输入gcc hello.o –o hello就可以得到hello可执行文件,此时我们在linux下输入./hello,屏幕上就会出现一句hello world

这里写图片描述


以上仅仅是一个hello.c到可执行文件的翻译过程,然而事实上,一个程序开发和运行远不止于此,还需要和操作系统等等打交道,以下是我自己截取的一个简图。

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值