程序的编译链接

程序编译分为四个过程

预处理-编译-汇编-链接

预处理-展开所有代码

test.c->test.i

#include 头文件的包含;

#define 宏替换;

注释删除-使用空格来替换注释;


编译-检查错误,将高级语言代码解释为汇编代码

test.i->test.s

语法分析;

词法分析;

语义分析;

符号汇总-函数名/全局变量;


汇编-将汇编代码解释为二进制的机器指令

test.s->test.o

形成符号表:符号-地址;


链接-将所有目标代码由链接器链接在一起,生成可执行程序

test.o->test.exe

符号表的合并和符号表的重定位;


链接分为动态链接和静态链接

动态链接链接动态库,将库中所用到的函数符号信息表记录到可执行程序中;

好处是生成的可执行程序比较小,内存中所有程序共用同一个库,降低了代码冗余;

缺点是运行时需要依赖动态库的存在,要把动态库也加载到内存中;

静态链接链接静态库,直接将静态库中用到的函数写入到可执行程序中;

好处是运行程序时,不需要要依赖库的存在;

缺点是生成的可执行程序比较大,有可能会造成内存冗余;

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值