我正在运行一个 C++ 程序,该程序std::bad_alloc
在任意点终止,这取决于指定的输入。以下是有关该计划的一些观察/要点:
- 对于较短的运行(运行时间取决于输入),程序正常完成。问题只出现在较大的运行中。
- 该程序没有任何可检测到的内存泄漏。使用 Valgrind/Memcheck 对较小的运行进行了检查。此外,我的整个代码没有任何指针(所有动态分配都由库完成,例如 in
std::vector
和std::string
;失败的是这些库类内部的分配),因此内存泄漏的可能性极小。 - 几个对象在循环中分配,然后移动到容器中。其中一些对象打算在程序几乎结束之前一直存在。
- 我怀疑堆碎片可能是一个问题(请参阅C++ 程序因 std::bad_alloc 而死,但 valgrind 报告没有内存泄漏)但我使用的是 64 位系统,带有 64 位编译器(特别是带有 g++ 的 Linux)和堆碎片在 64 位土地上让我相信堆碎片在 64 位系统上不是问题。
还有什么我应该尝试的吗?任何可以提供帮助的特定工具?还有其他建议吗?
ulimit -v
更新:终于发现虚拟内存在早些时候已经受到限制。我后来忘记了这一点,因此内存耗尽。将其重新设置以unlimited
解决问题。