我有以下问题:
在 Windows 机器上运行的程序(32 位,3.1Gb 内存,VC++2008 和 mingw 编译代码)失败并bad_alloc
抛出异常(在分配大约 1.2Gb 后;尝试分配 900 万双精度向量时抛出异常,即大约 75Mb)还有大量可用的 RAM(至少根据任务管理器)。
在 Linux 机器(32 位、4Gb 内存;32 位、2Gb 内存)上运行的相同程序运行良好,峰值内存使用量约为 1.6Gb。有趣的是,由 mingw 生成的 win32 代码在 wine 下的 4Gb linux 机器上运行也因 bad_alloc 而失败,尽管在 Windows 下运行时在不同的(稍后)位置...
可能的问题是什么?
- 堆碎片?(我怎么知道?这怎么解决?)
- 堆腐败?(我已经在启用 pageheap.exe 的情况下运行了代码,没有报告任何错误;实现了带边界检查的向量访问 --- 再次没有错误;代码基本上没有指针,只使用了
std::vector
s 和std::list
s。在 Valgrind 下运行程序( memcheck) 消耗过多内存并提前结束,但没有发现任何错误) - 记不清???(应该有足够的内存)
此外,在 linux 版本运行时(甚至在内存较少的机器上),windows 版本失败的原因可能是什么?(另请注意,/LARGEADDRESSAWARE 链接器标志与 VC+2008 一起使用,如果这可以产生任何影响)
任何想法都将不胜感激,我对此束手无策...... :-(