静态库和动态库的特点和关系
来源:互联网 发布:淘宝图片上传后变大 编辑:程序博客网 时间:2024/06/05 05:42
首先要搞清楚库是什么?
库是一段可以复用的二进制代码的有序集合。
静态库和共享库的区别?
1.静态库在编译时载入,动态库是运行时载入。动态函数库在编译的时候 并没有被编译进目标代码中,你的程序执行到相关函数时才调用该函数库里的相应函数,因此动态函数库所产生的可执行文件比较小。由于函数库没有被整合进你的程序,而是程序运行时动态的申请并调用,所以程序的运行环境中必须提供相应的库。动态函数库的改变并不影响你的程序,所以动态函数库的升级比较方便。像windows的更新,英雄联盟的更新。。。。
2.静态库是在编译时将事先的所有库文件都载入,动态库在运行时将需要的库文件载入,利用静态函数库编译成的文件比较大,因为整个 函数库的所有数据都会被整合进目标代码中,他的优点就显而易见了,即编译后的执行程序不需要外部的函数库支持,因为所有使用的函数都已经被编译进去了。当然这也会成为他的缺点,因为如果静态函数库改变了,那么你的程序必须重新编译。
当程序与静态库连接时,库中目标文件所含的所有将被程序使用的函数的机器码被copy到最终的可执行文件中。这就会导致最终生成的可执行代码量相对变多,相当于编译器将代码补充完整了,这样运行起来相对就快些。不过会有个缺点: 占用磁盘和内存空间. 静态库会被添加到和它连接的每个程序中, 而且这些程序运行时, 都会被加载到内存中. 无形中又多消耗了更多的内存空间.
与共享库连接的可执行文件只包含它需要的函数的引用表,而不是所有的函数代码,只有在程序执行时, 那些需要的函数代码才被拷贝到内存中。这样就使可执行文件比较小, 节省磁盘空间,更进一步,操作系统使用虚拟内存,使得一份共享库驻留在内存中被多个程序使用,也同时节约了内存。不过由于运行时要去链接库会花费一定的时间,执行速度相对会慢一些,总的来说静态库是牺牲了空间效率,换取了时间效率,共享库是牺牲了时间效率换取了空间效率,没有好与坏的区别,只看具体需要了。
另外,.一个程序编好后,有时需要做一些修改和优化,如果我们要修改的刚好是库函数的话,在接口不变的前提下,使用共享库的程序只需要将共享库重新编译就可以了,而使用静态库的程序则需要将静态库重新编译好后,将程序再重新编译一便。
- 静态库和动态库的特点和关系
- C++动态库和静态库的特点及编译使用
- 动态库和静态
- lib与dll的关系(详解静态链接库和动态链接库)
- 静态库和动态库的区别
- 静态库和动态库的区别
- 动态库和静态库的生成
- 静态库和动态库的区别
- Linux的静态库和动态库
- 静态库和动态库的创建
- 静态库和动态库的区别
- 静态库和动态库的区别
- 动态库和静态库的区别
- 静态库和动态库的区别
- 静态库和动态库的区别
- 静态库和动态库的区别
- 静态库和动态库的区别
- 静态库和动态库的使用
- (转载)Sumblime Text 2 常用插件以及安装方法
- ubuntu下使用c++11
- 测试小卒子打怪之路
- Linux应用程序设计之网络基础编程
- 在Eclipse下使用Maven创建SpringMVC样例项目
- 静态库和动态库的特点和关系
- Android Studio中运行报错:libpng error: Not a PNG file的解决方法
- 学生信息管理系统(四)
- Android中通过Hanler实现短信倒计时效果
- oracle sql资源消耗相关视图:v$sql,v$sqlarea,v$sqltext
- linux下的IO模型
- 初学高级语言要保持的好习惯
- j2se 总结
- 剑指offer 面试题5 从尾到头打印链表