静态库和动态库的区别
2016-06-05 22:36
169 查看
静态库被链接后库就直接嵌入可执行文件中了,这样就带来了三个问题。
(1)磁盘空间被浪费了。想象一下,如果多个程序链接了同一个静态库,则每一个生成的可执行文件就都会有一个库的副本,必然会浪费系统空间。
(2)内存空间也被浪费了。当多个链接了同一个静态库的程序被加载到内存运行时,会造成不必要的内存浪费,后果可能会导致内存不足而产生频繁的内存换页。
(3)一旦发现了库中有bug,挽救起来就比较麻烦了。必须一一把链接该库的程序找出来,然后重新编译。
动态库的出现正弥补了静态库的以上弊端。因为动态库是在程序运行时被链接的,这是一种时间换空间的做法。磁盘上保留一份动态库的副本,所有链接到动态库的程序则保留一份动态库的信息存根,因此节约了磁盘空间。当程序运行时,把所需的动态库加载到内存中(注意不是整个动态库加载,只是加载需要代码),如果其他程序已经把动态库加载到内存中时,那么该程序则直接从内存中读取,即多个程序共享该动态库,所以又节约了内存。当程序运行时如果发现了bug或要升级也很简单,只要用新的库把原来的替换掉就行了,而不需要重新编译这个程序。
静态库也有自己的优点:编译后的执行程序不需要外部的函数库支持,因为所有使用的函数都已经被编译进去了。
静态库的名字一般是libxxx.a(Linux)
动态库的名字一般是libxxx.so(Linux),有时候也是 libxxx.so.major.minor,xxxx是该lib的名称,major是主版本号, minor是副版本号
(1)磁盘空间被浪费了。想象一下,如果多个程序链接了同一个静态库,则每一个生成的可执行文件就都会有一个库的副本,必然会浪费系统空间。
(2)内存空间也被浪费了。当多个链接了同一个静态库的程序被加载到内存运行时,会造成不必要的内存浪费,后果可能会导致内存不足而产生频繁的内存换页。
(3)一旦发现了库中有bug,挽救起来就比较麻烦了。必须一一把链接该库的程序找出来,然后重新编译。
动态库的出现正弥补了静态库的以上弊端。因为动态库是在程序运行时被链接的,这是一种时间换空间的做法。磁盘上保留一份动态库的副本,所有链接到动态库的程序则保留一份动态库的信息存根,因此节约了磁盘空间。当程序运行时,把所需的动态库加载到内存中(注意不是整个动态库加载,只是加载需要代码),如果其他程序已经把动态库加载到内存中时,那么该程序则直接从内存中读取,即多个程序共享该动态库,所以又节约了内存。当程序运行时如果发现了bug或要升级也很简单,只要用新的库把原来的替换掉就行了,而不需要重新编译这个程序。
静态库也有自己的优点:编译后的执行程序不需要外部的函数库支持,因为所有使用的函数都已经被编译进去了。
静态库的名字一般是libxxx.a(Linux)
动态库的名字一般是libxxx.so(Linux),有时候也是 libxxx.so.major.minor,xxxx是该lib的名称,major是主版本号, minor是副版本号
相关文章推荐
- android 界面布局 很好的一篇总结
- Linux下的第一步——进度条(gcc&Makefile)
- C++作业7
- c++作业7
- C/C++值传递,指针传递和引用传递的概念
- vim简易教程
- Exchange 2010 PS之New-SendConnector&get-SendConnector&Set-sendConnector!
- c++拾遗-----内存模型
- Android Studio教程从入门到精通
- Chapter 2. C++程序设计入门
- net core VS goang web
- vue简单使用
- openmp在图像处理上面的运用
- NOSql之redis的学习
- sql语句判断两个时间段是否有交集
- 存储过程、触发器和用户自定义函数实验 (存储过程)
- c++实验7-最大公约数和最小公倍数
- hiho 题目1 : 非法二进制数(数位dp)
- C++第七次作业
- HDU:2083 简易版之最短距离(水)