编译链接时,计算机内部到底做了什么?

本文详细介绍了C/C++程序从源代码到可执行文件的整个编译过程,包括预编译、编译、汇编、链接以及运行阶段的具体操作,深入探讨了每个阶段计算机内部的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  源文件(.c 或 .cpp文件)要想运行起来需要经过预编译、编译、汇编、链接、运行几个阶段。那么,这几个阶段中计算机内部又做了什么呢?
预编译阶段:
  1.删除 #define (宏定义)并作文本替换;
  2.处理 #if #endif 等预编译指令;
  3.递归展开 #include (头文件中可能包含其他头文件);
  4.删除注释;
  5.添加行号和文件标识;
  6.保留 #pragma指令。
编译阶段:
  1.词法分析(检查单词是否合法规则);
  2.语法分析;
  3.语义分析;
  4.代码优化;
  5.生成汇编指令(生成汇编语言,不是机器指令)。
汇编阶段:
  1.翻译汇编指令,生成目标文件(可重入二进制文件)。
链接阶段
  1.合并段和符号表;
  2.符号解析;
  3.分配地址和空间;
  4.符号的重定位。

  链接执行后生成的可执行文件是不能直接运行的,因为,可执行文件是存储在磁盘上的,而运行是需要在内存上去进行的,不具备运行环境。因此运行阶段中还需要做以下事情。

运行阶段
  1.建立虚拟地址空间和物理内存的映射,创建内核映射结构体(PCB)页表和页目录;
  2.加载指令和数据;
  3.把可执行文件的入口地址放入下一行指令寄存器中。

简单的整理如下:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值