编译链接运行原理

it2022-05-05  184

为什么程序要进行编译连链接才能运行呢?因为计算机只能识别二进制文件,不能处理.c/.cpp文件

一、编译连接

第一阶段:预编译 .i  (gcc -E hello.c -o hello.i)

删除#define,展开所有的宏定义进行文本替换处理预编译指令 #if  #endif  #elif  #ifdef递归展开 #include 预编译指令删除注释,//    /**/添加行号和文件标识保留#pragma指令,给编译器处理

第二阶段:编译 .s   (gcc -S hello.i -o hello.s)

词法分析语法分析语义分析代码优化生成汇编指令

第三阶段:汇编 .o  (gcc -c hello.s -o hello.o)

翻译指令(将指令翻译为二进制代码)

第四阶段:链接 .exe        

合并段和符号表符号解析分配地址和空间符号重定位

二、运行原理

1、完成可执行文件到虚拟内存的映射,建立虚拟地址空间和物理内存的映射(创建映射结构体 PCB、创建页、页表)

2、加载指令和数据 (以页的方式加载,一页4K)

3、入口地址写入下一行指令寄存器


最新回复(0)