KPe*_*xEA 13 c c++ memory virtual-memory
我编写了一个转换器,它接受openstreetmap xml文件并将它们转换为二进制运行时渲染格式,通常约为原始大小的10%.输入文件大小通常为3GB或更大.输入文件不会一次性加载到内存中,而是在收集点和多边形时进行流式处理,然后在它们上运行bsp并输出文件.最近在较大的文件上,它耗尽内存并死掉(有问题的一个有1400万个点和100万个多边形).通常我的程序在发生这种情况时使用大约1gb到1.2gb的ram.我已经尝试将虚拟内存从2增加到8GB(在XP上),但这种改变没有任何效果.此外,由于此代码是开源的,我希望无论可用的ram(尽管速度较慢)都可以使用它,它可以在Windows,Linux和Mac上运行.
我可以使用哪些技术来避免内存不足?处理较小子集中的数据,然后合并最终结果?使用我自己的虚拟内存类型的处理程序?还有其他想法吗?
jal*_*alf 16
首先,在32位系统上,无论页面文件设置如何,您都将始终限制为4 GB内存.(其中,在Windows上只有2GB可用于您的进程.在Linux上,您通常可以使用大约3GB)
因此,第一个明显的解决方案是切换到64位操作系统,并编译64位应用程序.这为您提供了巨大的虚拟内存空间,操作系统将根据需要将数据交换进页面文件以保持工作.
其次,一次分配较小的内存块可能会有所帮助.与一个1GB的块相比,通常更容易找到4个256MB的可用内存块.
第三,分开问题.不要一次处理整个数据集,而是尝试一次只加载和处理一小部分.
| 归档时间: |
|
| 查看次数: |
9286 次 |
| 最近记录: |