Chinaunix首页 | 论坛 | 博客
  • 博客访问: 351660
  • 博文数量: 82
  • 博客积分: 3353
  • 博客等级: 中校
  • 技术积分: 742
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-20 19:13
文章分类

全部博文(82)

文章存档

2015年(1)

2014年(1)

2013年(1)

2012年(12)

2011年(3)

2010年(25)

2009年(37)

2008年(2)

我的朋友

分类: C/C++

2015-03-20 22:14:20

静态加载比较方便,动态加载比较灵活一些,对于不常用的代码,可以在使用时LoadLibrary,在不用时FreeLibrary,不必长时间占用内存资源。有些情况(例如导出类)只能用静态加载的方式。从代码维护角度来说,两者差别不大,用静态略微方便一些。
静态加载,简单方便,但是不够灵活

动态加载,复杂一些,需要显示地获取函数调用地址,但是很灵活,可以随时加载和卸载

 

--------------------------------------------------------------------------------
这个问题第5个回答:
有一种典型情况,需要用动态加载

当你不能确定动态库是否存在时,可以用LoadLibrary加载,如果返回失败,就可以直到该动态库不存在,如果用静态加载的话,就会弹出系统出错框 
--------------------------------------------------------------------------------
第6个回答:
 静态加载自动link进去了,调用的时候,只需要在别的工程中包含对应的h,lib文件,然后就可以直接调用了,实际运行的时候,把对应的静态加载比较方便,
 动态加载比较灵活一些,对于不常用的代码,dll放到当前路径等。动态加载就是代码中LoadLibrary,GetProcAddress来调用函数,只需要h和dll就够了,而且可以FreeLibrary,这样可以动态变化,不会一直占用进程的内存空间,方便控制,一般都是使用这个了,有些情况(例如导出类)只能用静态加载的方式。 
--------------------------------------------------------------------------------
这个问题第8个回答
对于MFC类库和windows类库: 
  我们一般在VS.net下开发的程序,需要这些类库的支持,但是对于没有VC环境的电脑,静态加载(实际就是静态加载了MFC或者windows库)就是将它所依赖的库加载到程序中,这样,程序就不用担心一直到不同用户的机子上,会运行不起来。静态加载,对于不含有VC环境的电脑上使用开发程序是一种很大便利。 
  对于COM\ActiveX控件,如果使用动态库的话,控件就结构就比较的复杂,因为控件是个精细的东西。如果控件库依赖缺少,就会导致控件下载不下来,或者注册不上。而且动态库的依赖,需要在INF配置文件中有严格的书写,不然也会导致不能下载,更别说智能升级了。但是对于使用静态加载的话,所有的依赖性,都最后包含在生成的最终文件中,只有一个文件,处理起来相当的便利。

可以说,对于发布给客户这个阶段来说,使用静态编译是比较好的。

对于开发者来说: 
  静态加载就有一定的劣势,静态加载不能进行调试,不能进行下层的跟踪,是一个致命的问题。而动态库却相对来说灵活的多。 
  同时,假设给发给用户的部分依赖库进行升级,动态库也是有很大优势的。静态库就没这个优势了。
-----------------------------------------------
这个问题第9个回答:
1.静态加载,默认情况下进程启动就开始加载,并在进程退出时卸载,相对于使用过程当中比较频繁,或者贯穿整个程序的生命周期的选择这一种方法,并且可以通过bind来提升效率。 
2.对于某些可能会用不到,但是如果用得到的话就贯穿整个应用程序的,那么可以选择Delayload. 
3.动态加载,相对比较灵活,可控性更强,但是需要用代码维护DLL的生命周期。可对于那些很偶然才会用到的采用动态加载,相对资源消耗更小。另外对于一个长时间稳定运行的应用程序,例如一周内七剩二十四小时不间断运行的,那么相比之下使用动态加载,还有一个好处就是热更新,也就是在程序运行过程当中在不停止程序的情况下进行更新(具体的操作这里就不提了)。 
--------------------------------------------------
这个问题第12个回答:
:) 
静态加载不能更换dll的名字把? 
动态的就没有这个限制拉 你在程序里随便加那个dll 而且不会不受控制的报错把?静态的一定会告诉你 找不到那dll了 
--------------------------------------------------------------------------------
这个问题第13个回答:
静态加载的时候在发布程序的时候不需要有额外的库,而动态加载的时候就需要有额外的库的帮助了


http://www.cnblogs.com/oskycar/articles/1587852.html

阅读(823) | 评论(0) | 转发(0) |
0

上一篇:SQLite学习手册(开篇)

下一篇:没有了

给主人留下些什么吧!~~