编译链接运行原理(1,2,3)

在这里插入图片描述
在这里插入图片描述
从一个.c/cpp到进程
预编译,汇编,汇编,链接,运行

编译阶段

(预编译,编译,汇编,链接)在一个编译单元处理(一个源文件)
一,预编译(产生.i文件)
1,删除#define并作文本替换
2,#include递归展开头文件
3,#if,#endif,#elif的处理
4,删除注释
5,添加行号,文件标识
6,保留#prangma
二,编译
1,词法分析
变量:数字,字母,下划线。(数字不能做首字母)
2,语法分析
3,语义分析
4,代码优化
5,生成汇编指令
三,汇编生成.o的文件(ELF格式),即目标文件或可重入二进制文件
1,翻译指令
大概的布局
a,为什没bss信息不存在,信息从哪里来?
因为在section header(目录文件)可以找到
b,bss少了一个字节,少了一个变量
少了一个弱符号
强弱符号:全局变量存在强弱符号,弱符号放在COM,静态(局部变量)不存在
————————————
编译阶段结束
当.c到.o每一个文件都是单独生成的
若有外部符号,将外部符号时先放到**“UND”
在函数中有外部的符号引用或者是函数的引用,先给一个
虚拟地址**

链接

目标文件和可执行文件是ELF格式文件(Windows是PE
一,合并段和符号表
(处理强弱符号)
a,找到强符号-——删除弱符号——使用强符号
b,找不到——'COM‘——.bss
二,符号解析
符号引用的地方找到符号定义的地方
“UND”找到符号定义区
三,分配虚拟地址空间
四,符号的重定位
a,真实地址和偏移替换
b,虚假地址和偏移
——————————————
链接结束
合并的文件的和虚拟地址空间做了映射,但虚拟地址空间和真实物理空间还没映射

运行

一,建立虚拟地址空间和物理内存空间的映射
创建内核映射结构体,创建页表页目录
二,加载指令和数据 loader
三,main入口地址写入下一行指令寄存器

机械原理——存储器
空间越大—— io越差——越便宜
空间越小——io越好——越昂贵

操作系统

1,内存管理模块
2,进程管理模块

3,文件管理模块

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值