Sea*_*ean 0 memory windows dll memory-management
我正在开发一个32位的Windows应用程序,偶尔会耗尽内存(2GB的虚拟地址空间).当我看看如何使用WinDbg或VMMap分配虚拟内存时,我注意到一个dll映像占用了85 MB的虚拟内存空间.具体来说,84 MB是在".data"部分,并具有"写入时复制"保护.但是,当我查看硬盘时,dll只有81 KB.
dll映像如何在虚拟地址空间中比在磁盘上大1000倍?请注意,我只询问"图像",而不是堆或堆栈,或映射内存,只是图像 - 我意识到堆,堆栈,映射内存等当然会是额外的.
尝试创建一个空的.dll并在文件范围添加它:
char global_stuff[84*1024*1024];
Run Code Online (Sandbox Code Playgroud)
那应该在.bss部分声明一个条目.这是图像中定义零初始化数据的部分.由于该数据初始化为零,因此在运行时声明它应该有多大而不是在磁盘上存储一堆零是一个相当简单的优化.
| 归档时间: |
|
| 查看次数: |
139 次 |
| 最近记录: |