dll映像如何在虚拟内存中比硬盘空间大1000倍?

时间:2010-11-19 16:51:57

标签: windows memory dll memory-management

我正在开发一个32位的Windows应用程序,偶尔会耗尽内存(2GB的虚拟地址空间)。当我看看如何使用WinDbg或VMMap分配虚拟内存时,我注意到一个dll映像占用了85 MB的虚拟内存空间。具体来说,84 MB是在“.data”部分,并具有“写入时复制”保护。但是,当我查看硬盘时,dll只有81 KB。

虚拟地址空间中的dll映像如何比磁盘上大1000倍?请注意,我只询问“图像”,而不是堆或堆栈,或映射内存,只是图像 - 我意识到堆,堆栈,映射内存等当然会是额外的。

1 个答案:

答案 0 :(得分:6)

尝试创建一个空的.dll并在文件范围添加:

char global_stuff[84*1024*1024];

那应该在.bss部分声明一个条目。这是图像中定义零初始化数据的部分。由于该数据初始化为零,因此在运行时声明它应该有多大而不是在磁盘上存储一堆零是一个相当简单的优化。

相关问题