CSAPP的零碎知识点总结

本文详细介绍了从源代码到可执行程序的步骤,包括预处理、编译、汇编和链接。讨论了ELF可重定向目标文件结构和动态链接的概念。接着,深入探讨了虚拟内存机制,如页面替换算法、页表和多级页表的作用,以及动态内存分配的原理和管理策略。最后,提到了动态内存分配的内部碎片和外部碎片问题,以及不同的内存分配策略。
摘要由CSDN通过智能技术生成

CSAPP

从源代码到可执行程序的步骤

C预处理器将.c文件翻译成.i文件(ASCII码)
处理所有#define,#include等带井号的预编译符号,删除注释(除了#pragma编译器指令),添加行号和文件标示符以便提示错误警告等

C编译器将.i文件翻译成一个.s文件(汇编)
词法分析,语法分析,语义分析,源代码优化,目标代码生成,目标代码优化

汇编器将.s文件翻译成.o文件(可重定位目标文件)

链接器将相关的所以.o文件以及一些必要的系统目标文件组合起来生成一个可执行目标文件,同时要负责符号的解析和重定位,符号解析将目标文件中的每个全局符号都绑定到一个唯一的定义,而重定位确定每个符号最终的内存地址,并修改对那些目标的引用
静态链接:编译阶段将静态库加入可执行文件,文件大,简而言之就是可执行文件包含运行时所需的全部代码,不易于维护,只要库变了,整个可执行文件都得重新链接
动态链接:链接阶段紧紧加入描述信息,运行时在将相应的动态库(也称共享库)加载到内存,只要调用接口不变,库和代码本身就是相互独立的,动态链接还可以分为装载时链接和运行时链接,区别简单来说就是编译器是否知道进程要调用的DLL模块(动态链接库),编译动态库必须是以位置无关代码方式编译-fpic

ELF可重定向目标文件结构(.o) 图7-3
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值