现在的情况是,我有一个 exe 需要调用有个 dll(假设A),这个 dll 又静态链接了一堆dll(因业务需要,不可精简)
但是在exe中使用 loadlibrary 加载 A 的时候,会失败,错误码是 8 ,也就是空间不足结果可以理解,因为 A 后面的 dll 实在太多了,所有的dll文件加起来有 500多M(我也很崩溃,怎么这么多!)经过初步定位,加载失败的原因应该是全局变量过多造成内存不足.我现在的问题是:
1.一个exe进程所能加载的 dll 内存大小应该是有限制的,好像是256M,但是这个限制是指对什么的限制,例如是全局变量的内存,还是包括代码空间?2.在没有dll代码的情况下,能否知道每一个dll的初始化的时候所占用的空间?如果可以,如何分析,用什么工具等等?(我简单用了一下 IDA,但是没有什么头绪)谢谢
但是在exe中使用 loadlibrary 加载 A 的时候,会失败,错误码是 8 ,也就是空间不足结果可以理解,因为 A 后面的 dll 实在太多了,所有的dll文件加起来有 500多M(我也很崩溃,怎么这么多!)经过初步定位,加载失败的原因应该是全局变量过多造成内存不足.我现在的问题是:
1.一个exe进程所能加载的 dll 内存大小应该是有限制的,好像是256M,但是这个限制是指对什么的限制,例如是全局变量的内存,还是包括代码空间?2.在没有dll代码的情况下,能否知道每一个dll的初始化的时候所占用的空间?如果可以,如何分析,用什么工具等等?(我简单用了一下 IDA,但是没有什么头绪)谢谢
解决方案 »
- 当点击退出程序时有些线程操作并没有完成,这时如何安全退出程序?
- 像WORD中的艺术字是怎么做的,为何字体大小可以拖意拉伸。它的原则是不是先转化为图片场景,然后通过StretchBlt进行处理啊?
- 请教 谢谢
- 有关DHT11温湿度传感器用VC实现电脑界面的显示
- 关于CStatic的问题(Waitting online)
- 请问如何判断服务器端和客户端连接所处的状态.关于CSocket类
- 请问硬盘整理程序的原理是什么!?
- essential C++中的例子程序的问题?
- 能告诉我大学计算机系计算机应用技术的每学期课程安排?
- 如何用代码设置一个按钮的无效与有效(无效即按钮呈灰色不可操作状态)?
- 求类似protel原理图绘制的走线算法
- 网页中的unicode字符,转化为中文
你说的忒对了
小弟也是这么想的,但是要首先定位出是哪个DLL占用的内存过大PS.
dll的静态大小由于一些原因,无法缩减!
由于历史和现实的原因,真的无法缩减!
现在能做的就是找到具体无法加载的原因,做有限度的优化能不能有什么办法,谢谢
我之所以说 256M 的限制,是因为我重现的时候,测试一个dll,如果申请了过大的内存,编译也能成功
但是会VC会提示:Release/TestDll.dll : warning LNK4084: total image size 1073803264 exceeds max (268435456); image may not runTestDll.dll - 0 error(s), 1 warning(s)因此我觉得是不是说有这个限制,因为这个测试的dll编出来本身是比较小的,才56K,但是编译的时候已经有这样的提示了另外,你说的 64 个 dll 限制的出处是哪里,能否提供原始文档
非常感谢!
多谢回复这个已经有考虑的,但是现在的dll有很多,有30个以上(具体多少,我要到公司里才能知道)
但是粗略想了一下,似乎拆分也不会有多少作用可能是真的很牛,是一个非常大的系统...
具体我也不是很清楚,我是外围人员
然后进行 LoadLibrary,...,你会发现不到 64.dll,就会装载失败;但是如果你使用 LoadLibraryEx,参数 LOAD_LIBRARY_AS_DATAFILE,64 不是一个限制;记得原因是与 TLS 相关,好多年前的事情了,实在记不得来源了...如果找到了,再说吧
现在就是想知道哪些DLL产生了什么问题
不过从回帖来看,好像大家对这方面似乎了解不多