编译的过程

本文详细介绍了编译过程的四个阶段,并探讨了链接的原理,特别是静态链接和动态链接的区别。静态链接在程序构建时完成,可能导致内存浪费,而动态链接在运行时进行,节省内存并便于库更新。然而,动态链接依赖于正确的DLL,缺失会导致运行错误,且可能带来轻微性能损失。动态链接中,代码段共享,但数据段不共享,确保了各程序实例的独立性。
摘要由CSDN通过智能技术生成

编译的过程

预处理, 展开头文件/宏替换/去掉注释/条件编译 (test.i main .i)
编译, 检查语法,生成汇编 ( test.s main .s)
汇编, 汇编代码转换机器码 (test.o main.o)
链接 链接到一起生成可执行程序 a.out

链接是怎么链接的

链接就是将汇编生成的OBJ文件、系统库的OBJ文件、库文件链接起来,最终生成可以在特定平台运行的可执行程序。

静态链接和动态链接的区别

静态链接和动态链接两者最大的区别就在于链接的时机不一样,静态链接是在形成可执行程序前,而动态链接的进行则是在程序执行时
静态链接可能会造成内存浪费,因为内存中可能会有多个相同的程序副本。
动态连接则不会有内存浪费,而且升级dll方便,直接替换就可以了。
确定是如果运行时动态连接的dll丢失则会报错,而且进行动态链接的时候性能也会略有损失

思考

如果动态链接的代码里面有个静态变量被A修改了 B的链接里面这个变量会变吗

很明显不会,从反正法可以轻易得出结论。如果这个结论成立的话,那么系统必然会出问题,因为肯定系统中肯定有这种情况,但是实际上操作系统并无事发生

不过真正的原因是因为:动态链接里,只有代码段是共享的,数据段是不共享的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值