C语言的编译链接执行过程

14 篇文章 0 订阅

C语言的编译链接执行过程

​ 机器不能识别高级语言,而对我们来说高级语言更方便理解,这需要编译器的帮助才能完成中间的转化过程:将高级语言转化成机器能识别的二进制文件。

​ 而一个C程序在执行过程中,需要经历两个环境:编译环境和执行环境

编译环境的四个步骤

在这里插入图片描述

  • 预处理:对源代码进行处理
  • 编译:生成汇编语言
  • 汇编:将汇编语言转化成机器语言
  • 链接:将生成的目标文件与相关的目标文件或标准库链接,生成可执行文件。

在这里插入图片描述

预处理

预处理过后的源代码仍然是.c文件,这个过程中只是对源代码进行了一些替换,删除,添加动作。如果你的程序即便语法错误,这个步骤仍然会执行

  • 对#include文件替换
  • 宏#define的递归替换
  • 条件预编译指令的替换
  • 去掉注释
  • 保留#pragma指令,编译器会用到。

编译

编译的过程会将.c文件转换成汇编语言,再转换之前会先源代码进行词法分析、语法分析、语义分析、符号汇总,再将对应的源代码翻译成汇编语言,这里的汇编语言,其实是机器码的助记符

​ 符号汇总,是将程序中的函数名,全局变量看作一个符号,便于在链接过程中找到相应的位置。

汇编

汇编将汇编语言转换成对应的二进制语言,即机器指令。将.s语言生成.obj的目标文件。

​ 目标文件由段组成,通常一个目标文件中至少两个段:

  • 代码段:主要是程序的指令,可读可执行,但不可写
  • 数据段:存放程序要用到的临时变量或静态数据库,可读,可执行,可写

不同CPU对应的机器码不同

链接

将多个目标文件链接成可执行文件,合并段表,符号表的重定向。

<在Linux 下编程时,我们可以根据这个过程写一个Makefile文件,方便修改编译。

执行环境

  • 程序在过程中必须载入程序,CPU通过执行内存中的指令开始执行程序。

  • 程序的执行从调用main函数开始

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值