关于动态链接库的问题

时间:2022-02-02 15:51:35
都知道DLL方便了代码的重用,但是我想知道的是,动态调用肯定不如静态编译好的代码执行快,而且也应该不稳定。
1.大量使用DLL会不会造成程序运行效率大大降低(比如降低30%),而且容易出错?

2.什么样的情况用DLL比较好?

3.而且DLL一般做什么工作比较好(比如媒体播放,图像处理,网络传输,数据加载等)?

4.一个DLL的加载是不是直接将其加载到内存中,然后调用里面的函数?

9 个解决方案

#1


1 不会
2 基础库,共享代码什么的.
3 什么都好
4 还有一些细节,比如重定向什么的.

#2


引用楼主 lxdfigo 的帖子:
都知道DLL方便了代码的重用,但是我想知道的是,动态调用肯定不如静态编译好的代码执行快,而且也应该不稳

定。

1.大量使用DLL会不会造成程序运行效率大大降低(比如降低30%),而且容易出错?
不會。但是凡事有利就有弊,動態加載自然在效率上多少有些損失,但還不至於損失那么大,正常情況下

2.什么样的情况用DLL比较好?
程序內部,各個模塊頻繁調用的部分,可以考慮做成dll,這樣能大大減小可執行程序中重複代碼的數量,進而縮
小程序的體積。

3.而且DLL一般做什么工作比较好(比如媒体播放,图像处理,网络传输,数据加载等)?
這個不確定,具體情況,具體分析,具體對待

4.一个DLL的加载是不是直接将其加载到内存中,然后调用里面的函数?
宏觀上看,當這個dll裡面所有的函數都沒有被調用的時候,通常dll不會加載到內存中;而一旦有一個屬於dll的
函數被調用,OS就會首先將dll加載到內存,然後根據偏移,找到函數在dll中的位置,再跳到那裡開始執行

.

#3


帮顶,用的不多。

#4


学习,观摩

#5


1.大量使用DLL会不会造成程序运行效率大大降低(比如降低30%),而且容易出错?
一般大量都还好,DLL加载在process中,处理效率比较高

2.什么样的情况用DLL比较好?
想封装一些公用的库,或者对某些代码进行封装,提供给别人使用

3.而且DLL一般做什么工作比较好(比如媒体播放,图像处理,网络传输,数据加载等)?
这些工作一般都可以,取决于你怎么实现

4.一个DLL的加载是不是直接将其加载到内存中,然后调用里面的函数? 
加载到当前进程空间,然后调用函数

#6


1.恰恰相反
2.DLL提供的是再包装
3.你可以划为一类的这些都很合适(你所说的自己都已经找出一个名字来命名此类了)
4.只加载一次,之后所有程序对这dll的调用都是执行同一份。

#7


1 不会 
2 基础库,共享代码什么的. 
3 什么都好 
4 还有一些细节,比如重定向什么的.

#8


可以参考5楼的回答

dll不仅可以减少静态编译的结果大小,减少重复代码,而且有利于代码维护,其效率也比较高!

#9




//首先要辩证的来看待这个问题:

都知道DLL方便了代码的重用,但是我想知道的是,动态调用肯定不如静态编译好的代码执行快,
                                     //反过来说静态编译会增大目标文件的尺寸,并且无法实现模块化以及重用
而且也应该不稳定。 
//这个有什么根据?如果使用dll不稳定,我认为微软就不会在操作系统里大量的使用DLL了

1.大量使用DLL会不会造成程序运行效率大大降低(比如降低30%),而且容易出错? 
//只要使用得当,答案是“不会”;相反,使用不当,就是使用lib库,效率也可能会很低

2.什么样的情况用DLL比较好? 
3.而且DLL一般做什么工作比较好(比如媒体播放,图像处理,网络传输,数据加载等)? 
//Anything. 只要是可以被模块化的东西。举个例子来说你可以做一个实现字符搜索功能的DLL,它可以从制定文本里快速找到目标字符串,将其作为DLL后,如果你的工程中需要这样的功能,你就可以使用这个DLL;当某一天你发现其实DLL里的搜索算法效率可以提高10倍时,同时导出函数原型又不需要变化,你可以改进这个算法,然后生成新的DLL并替换到以前的工程中,这时以前那些使用这些DLL的工程无需做任何改动就可以使用 具有新算法的DLL

4.一个DLL的加载是不是直接将其加载到内存中,然后调用里面的函数? 
//此问题同意6楼

#1


1 不会
2 基础库,共享代码什么的.
3 什么都好
4 还有一些细节,比如重定向什么的.

#2


引用楼主 lxdfigo 的帖子:
都知道DLL方便了代码的重用,但是我想知道的是,动态调用肯定不如静态编译好的代码执行快,而且也应该不稳

定。

1.大量使用DLL会不会造成程序运行效率大大降低(比如降低30%),而且容易出错?
不會。但是凡事有利就有弊,動態加載自然在效率上多少有些損失,但還不至於損失那么大,正常情況下

2.什么样的情况用DLL比较好?
程序內部,各個模塊頻繁調用的部分,可以考慮做成dll,這樣能大大減小可執行程序中重複代碼的數量,進而縮
小程序的體積。

3.而且DLL一般做什么工作比较好(比如媒体播放,图像处理,网络传输,数据加载等)?
這個不確定,具體情況,具體分析,具體對待

4.一个DLL的加载是不是直接将其加载到内存中,然后调用里面的函数?
宏觀上看,當這個dll裡面所有的函數都沒有被調用的時候,通常dll不會加載到內存中;而一旦有一個屬於dll的
函數被調用,OS就會首先將dll加載到內存,然後根據偏移,找到函數在dll中的位置,再跳到那裡開始執行

.

#3


帮顶,用的不多。

#4


学习,观摩

#5


1.大量使用DLL会不会造成程序运行效率大大降低(比如降低30%),而且容易出错?
一般大量都还好,DLL加载在process中,处理效率比较高

2.什么样的情况用DLL比较好?
想封装一些公用的库,或者对某些代码进行封装,提供给别人使用

3.而且DLL一般做什么工作比较好(比如媒体播放,图像处理,网络传输,数据加载等)?
这些工作一般都可以,取决于你怎么实现

4.一个DLL的加载是不是直接将其加载到内存中,然后调用里面的函数? 
加载到当前进程空间,然后调用函数

#6


1.恰恰相反
2.DLL提供的是再包装
3.你可以划为一类的这些都很合适(你所说的自己都已经找出一个名字来命名此类了)
4.只加载一次,之后所有程序对这dll的调用都是执行同一份。

#7


1 不会 
2 基础库,共享代码什么的. 
3 什么都好 
4 还有一些细节,比如重定向什么的.

#8


可以参考5楼的回答

dll不仅可以减少静态编译的结果大小,减少重复代码,而且有利于代码维护,其效率也比较高!

#9




//首先要辩证的来看待这个问题:

都知道DLL方便了代码的重用,但是我想知道的是,动态调用肯定不如静态编译好的代码执行快,
                                     //反过来说静态编译会增大目标文件的尺寸,并且无法实现模块化以及重用
而且也应该不稳定。 
//这个有什么根据?如果使用dll不稳定,我认为微软就不会在操作系统里大量的使用DLL了

1.大量使用DLL会不会造成程序运行效率大大降低(比如降低30%),而且容易出错? 
//只要使用得当,答案是“不会”;相反,使用不当,就是使用lib库,效率也可能会很低

2.什么样的情况用DLL比较好? 
3.而且DLL一般做什么工作比较好(比如媒体播放,图像处理,网络传输,数据加载等)? 
//Anything. 只要是可以被模块化的东西。举个例子来说你可以做一个实现字符搜索功能的DLL,它可以从制定文本里快速找到目标字符串,将其作为DLL后,如果你的工程中需要这样的功能,你就可以使用这个DLL;当某一天你发现其实DLL里的搜索算法效率可以提高10倍时,同时导出函数原型又不需要变化,你可以改进这个算法,然后生成新的DLL并替换到以前的工程中,这时以前那些使用这些DLL的工程无需做任何改动就可以使用 具有新算法的DLL

4.一个DLL的加载是不是直接将其加载到内存中,然后调用里面的函数? 
//此问题同意6楼