我正在开发一个32位的windows应用程序,它有时会耗尽内存(2 2GB的虚拟地址空间)。当我查看如何使用WinDbg或VMMap分配虚拟内存时,我注意到dll映像占用了85MB的虚拟内存空间。具体地说,其中84MB位于".data“部分,并具有”写入时复制“保护。然而,当我查看硬盘时,dll只有81KB。
dll镜像的虚拟地址空间怎么会比磁盘上的大1000倍呢?请注意,我只是询问" image ",而不是堆或栈,或映射内存,只是镜像-我意识到堆、栈、映射内存等当然是额外的。
发布于 2010-11-20 00:56:11
尝试创建一个空的.dll,并在文件范围内添加以下内容:
char global_stuff[84*1024*1024];这应该在.bss部分中声明一个条目。这是图像中定义零初始化数据的部分。因为数据被初始化为零,所以只需在运行时声明它应该有多大,而不是在磁盘上存储一堆零,这是一个相当简单的优化。
https://stackoverflow.com/questions/4227346
复制相似问题