广州市网站优化公司,高端网站制作效果好,开发者选项,wordpress侧边悬浮框一 前言
大家在用C语言编程时#xff0c;一定会遇到各种库#xff0c;它们为开发者提供了大量的预编译函数和数据结构#xff0c;从而极大地提高了软件开发的效率。
在C语言中#xff0c;库主要分为两种类型#xff1a;
静态库#xff08;Static Library#xff09;一定会遇到各种库它们为开发者提供了大量的预编译函数和数据结构从而极大地提高了软件开发的效率。
在C语言中库主要分为两种类型
静态库Static Library通常具有.a或.lib的扩展名。动态库Dynamic Library在Windows系统中通常具有.dllDynamic Link Library的扩展名在类Unix系统中则通常具有.soShared Object的扩展名。
这两种库在程序链接、加载和执行过程中有着不同的行为和特点。本文将详细探讨C语言中静态库和动态库的区别。 以printf函数作为库为例。
二 区别
区别1
静态库在目标文件链接成可执行文件阶段库函数(库函数本身有一个代码段)链接进可执行文件代码段中占了很大的内存空间。
而使用动态库时只是在链接时做了一个printf的标记当可执行程序运行时才会加载这段printf从库路径中加载动态链接库.so文件这样就节省了可执行程序的空间只有在运行这段很短的时间会占用可执行程序的空间。
可以做个测试写一个输出hello world的小程序一般是Linux下gcc中是默认是使用动态库的可以看到可执行程序a.out的大小只有7千多k而使用静态库链接后生成可执行程序时把printf也链接到了可执行程序中这时候可执行程序就有700多K了。
区别2
使用动态库对库的依赖性太强一般发布的话需要库文件库文件要放在相应的库路径中也发布。
静态链接库对库的依赖性不会有那么强。
静态库就像房车出门旅游不用依赖住房但是房车占空间。 动态库就像小车出门旅游依赖要住酒店但是小车省空间。
实际上使用动态库在运行的时候加载printf也会占用可执行程序在运行时占用可执行程序的空间其实是跟静态库是一样的。
但是试想一个可执行程序a.out中有多个文件如a应用程序,b应用程序,c文件程序a,b,c都需要调用printf。
使用静态库时链接时就链接了三份printf运行时就加载三份printf产生多分副本白白浪费内存。
而使用动态库时链接时只是将printf的标记链接进了可执行程序a,out运行时printf只用加载一份a调用时就是调用这一份printfb调用时也是调用这一份printf。这才是动态库相对于静态库真正的优势
三 总结
1 静态库
链接时将程序放进可执行程序会产生多份副本不依赖程序运行
2 动态库
程序运行时才去加载动态库找函数多进程共享依赖程序运行
大家是不是清晰一些了