DLL调用内存泄漏问题--是Window的bug吗
大家不妨试试,写一个小程序,只是不断调用(我是调用2万次测试的)LoadLibrary, GetProcAddress(这个可要可不要), FreeLibrary, 然后用任务管理器看看你的程序进程,是不是内存会不断地消耗?不知哪位高人能解释一下原因,这是Window的bug吗?这样调用能否控制泄漏,怎么控制?
问题点数:50、回复次数:11Top
1 楼qybao(阿宝)回复于 2006-03-01 08:35:15 得分 0
我用Window的系统dll测试,好像没问题,这样,应该是我自己的dll的问题了。首先声明,我只是调用LoadLibrary, FreeLibrary, 没调用dll的函数,所以函数里是否有内存泄漏,不在本讨论之内。 我想问,在编写dll的时候,怎样能让上层应用程序在调用时在内存里始终只保留一份资源共享。Top
2 楼RunningYang(sv)回复于 2006-03-01 08:38:08 得分 10
应该是你 DLL 的初始化函数里面有泄露吧?
也想知道你第二个问题的答案
顶Top
3 楼ouyh12345(五岭散人)回复于 2006-03-01 08:42:45 得分 10
做成com吧。
dll本来就要加载到应用程序的。Top
4 楼guogangj(无名小卒)回复于 2006-03-01 10:24:31 得分 10
检查下DllMain中有没有内存泄露?
如果没有,我想那是Windows的问题,我写过些网络通信程序一开始观察,也是越来越占内存,但运行了相当长一段时间后,它似乎会自动释放掉一些,使得内存占用率总是超不过一个上限。Top
5 楼sevencat(七猫)回复于 2006-03-01 12:17:16 得分 10
LoadLibrary缺省会调用你的DLL中的入口函数(假如你没有写,那就是编译器帮你自动生成的)Top
6 楼qybao(阿宝)回复于 2006-03-01 12:20:15 得分 0
我的dll入口只有很简单的return 1,应该不会有内存泄漏的
我奇怪的是我不断LoadLibrary, FreeLibrary,内存会慢慢消耗,但用系统的dll测试却不会,难道编写dll还有什么特别的讲究吗?
to ouyh12345()
不是不想做成com,但是客户要求的是做成dll,而且这个bug也是在客户那边测试发现的
to guogangj(无名小卒)
我之所以不断地测试,就是想看看内存涨到一定程度后是否会自动释放,但是没有下降的迹象,而且内存越耗越多,最后还当机了,这也是客户那边测试发现的。我现在奇怪的是,我还没执行dll的函数就已经出现内存泄漏了,真是想不透,会不会是其他dll造成的,因为在我的dll里调用了客户给的一个dll,但是如果不执行我的dll的函数,是不会把客户的dll加载进来的,所以光是LoadLibrary, FreeLibrary的话,应该还不涉及到客户的dll
Top
7 楼sevencat(七猫)回复于 2006-03-01 12:24:20 得分 0
经出现内存泄漏了,真是想不透,会不会是其他dll造成的,因为在我的dll里调用了客户给的一个dll,但是如果不执行我的dll的函数,是不会把客户的dll加载进来的,所以光是LoadLibrary, FreeLibrary的话,应该还不涉及到客户的dll
//==================
但你只要是链到了他的DLL,在你LoadLibrary的时候,他的入口函数也会被调用,你可以找找看有没有一些高级工具看看这些东东。Top
8 楼yameng(雅梦)回复于 2006-03-01 12:32:39 得分 10
使用VC中的Depends工具看看你的DLL都用了哪些其它的DLL,测试一下是不是别的DLL产生的内存泄露Top
9 楼qybao(阿宝)回复于 2006-03-01 13:42:12 得分 0
to sevencat(七猫)
我是在我的dll的函数里用loadliabary把客户的dll加载进来的,如果不执行我的函数,上层程序在加载我的dll的时候,是不是也链到了客户的dll,并调用了客户的dll的入口函数?
Top
10 楼sevencat(七猫)回复于 2006-03-01 14:02:33 得分 0
噢,那倒不会。Top
11 楼qybao(阿宝)回复于 2006-03-02 08:16:04 得分 0
问题解决
我写了个和客户的dll有同样接口的dll做测试,结果没有内存泄漏,说明客户的dll有问题,已经跟客户联系了,让他们自己再测试他们的dll
但是我还是很奇怪,如果不调用我的dll的函数,应该不会把客户的dll加载进来的,而事实上却加载,不知道客户的dll内部做了什么手脚,不管了,以后又时间再研究,结贴了,多谢楼上的各位兄弟了
Top




