DLL和CRT

引用:windows程序员面试指南

windows程序,一般包括静态库和动态库

静态库

在链接阶段库将会与目标汇编后的目标文件.o一起打包生成可执行文件。成为可执行文件的一部分,后续此库就可以消失了。也就是说在编译的最后一步(链接阶段),如果程序需要使用静态库,在这一步都会一起打包到可执行文件中。
优点:
使可执行文件依赖项少,已经被打包到可执行文件中了
编译阶段完成链接,执行期间代码装载速度快
缺点:
使可执行文件变大
若作为其他库的依赖库,将会造成多余的副本,因为必须与目标文件打包
升级不方便,升级必须重新编译

动态库

程序执行过程中调用dll。
**显示加载:**所需文件:dll文件。利用LoadLibrary()函数进行加载。
隐式加载: 所需文件:接口.h头文件,dll文件,lib文件。.h和.lib加载方式与静态加载完全一致。但.dll文件必须放在环境变量指定的目下。当然通常是与目标.exe文件放在一起。
优点:
动态库可以实现进程之间资源共享,有一份就行。
升级程序简单,不需要重新编译。
缺点:
运行期间在加载,将会减慢代码执行速度。
增加程序的依赖项,必须跟着可执行文件一起。

CRT(C运行时库)

CRT运行时库是程序在运行时所需要的库文件,通常运行时库是以LIB或DLL形式提供的

dll中申请内存,外部释放的问题
CRT库采用了全局变量来保存这个对象。
CRT静态链接 :CRT库的代码会链接到各个DLL中去,也包括这个全局变量。也就是说,每个使用CRT静态链接的dll中都有一个自己的全局堆句柄,他们自己都在这个句柄上使用内存。当释放dll中分配的内存时由于使用的堆句柄不一致于是出错。
CRT动态链接 :每个dll都是去调用CRT库的dll函数来分配和释放内存的,使用的是同一个句柄,所以没问题

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值