定义:
静态库与动态库都属于库,库从本质上来说就是种代码重用的方式。
把需要重复使用的公共代码抽离出来,生成库文件,外部程序只需包含库文件,调用相关接口即可
静态库与动态库区别:
静态库:需要库的.h和.lib文件,程序编译链接时,在链接阶段会把整个静态库打包到程序中,此时静态库就成为了程序的一部份
优点:
和动态库相比不需要带额外.dll,减少程序的依赖
运行速度快,不需要在运行期间动态加载dll
缺点:
程序体积变大,即使只使用库中一部份代码,也需要包含整个静态库
当静态库需要增加和修改代码时,需要重新编译静态库,而且包含静态库的程序也得重新编译
动态库:需要库的.dll文件,程序编译时并没有把动态库编译进来,只包含它需要的函数的引用表,在程序运行时才会加载动态库
优点:
动态库增加和修改代码方便,只要调用的函数名和参数以及返回值没有被修改,包含动态库的程序不需要重新编译
动态库在内存中只会驻留一份,多个进程使用相同动态库使用的是动态库的副本,与静态库相比节约了内存空间
缺点:
需要带.dll文件,增加了程序的依赖
运行期间需要加载dll,降低了程序运行速度
总结:
静态库:牺牲了空间效率,换取了时间效率
动态库:牺牲了时间效率,换取了空间效率
使用哪种库需要看具体需求,没有好坏之分