预处理(预编译)

test.c--翻译环境--test.exe--运行环境--运行结果

.编译(编译器)cl.exe

预编译--编译--汇编

预编译:

gcc test.c -E

预处理之后就停止,预处理之后产生的结果都放在test.i文件中

gcc test.c -E > test.i

  1. 完成了头文件的包含 #include

  1. #define定义的符号和宏的替换

  1. 注释删除

文本操作

编译:

gcc test.i -S

生成:test.s

把C语言代码转化成汇编代码

  1. 语法分析

  1. 词法分析

  1. 语义分析

  1. 符号汇总

汇编:

gcc test.s -c

-->test.o(test.obj)

把汇编代码转换成了机器指令(二进制指令)

  1. 生成符号表

test.o

这个文件是elf格式

readelf - 工具

计算机:《编译原理》

如何实现一个编译器,编译器的工作原理

link.exe链接(链接器)

把多个目标文件和连接库进行链接

  1. 合并段表

  1. 符号表的合并和重定位

程序执行过程:

  1. 程序必须载入内存中。

  1. 程序的执行便开始。接着便调用main函数。

  1. 开始执行程序代码。这个时候程序将使用一个运行的堆栈(stack),存储函数的局部变量和返回地址。程序同时也可以使用静态(static)内存,存储于静态内存中的变量在程序的整个执行过程一直保留他们的值。

  1. 终止程序。正常终止main函数;也有可能是意外终止。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值