- 对于较短的运行时间(运行时间取决于输入),程序正常完成。问题只出现在更长的运行中。
- 程序没有任何可检测到的内存泄漏。这在较短的运行中使用Valgrind/Memcheck进行了检查。此外,我的整个代码没有任何指针(所有动态分配都由库完成,例如在std::vector和std::string中进行分配;失败的是这些库类中的分配),因此内存泄漏极不可能发生。
- 几个对象在循环中被分配,然后移动到容器中。其中几个对象的寿命打算一直保持到程序接近结束。
- 我怀疑堆碎片可能是一个问题(参见C++ program dies with std::bad_alloc, BUT valgrind reports no memory leaks),但我使用的是64位编译器的64位系统(具体为Linux与g++),Heap fragmentation in 64 bit land让我相信在64位系统上,堆碎片不可能成为一个问题。
还有什么其他尝试的方法吗?有哪些特定的工具可以帮忙?有没有其他建议?
更新:最终发现早先通过ulimit -v
限制了虚拟内存。我后来忘记了这一点,因此出现了内存耗尽的问题。将其设置为unlimited
即可解决问题。