在低内存情况下使用STL容器无异常处理

时间:2014-05-28 21:32:10

标签: c++ stl

我一直试图处理VC ++代码中的低内存情况。 我已使用std::nothrow并检查new运算符的返回值是否为NULL。应用程序运行正常。

但是问题在于系统内存非常低,并且它在任何地方突然崩溃,特别是在STL容器调用(map,vector,queue等)中,错误是" Exception bad_alloc"。显然,这些容器无法分配所需的内存,因此只需抛出bad_alloc

既然我已经在我的代码中大量使用了这些容器,我只是不想要内部的每一个功能"尝试...赶上"块。它会使代码混乱。 (此外,代码使用基于事件的库。因此,许多函数都是回调。因此,它不像我可以放入try / catch块中的一个或几个父调用函数解决这个问题)

不使用try / catch,如何解决这个问题?

至少有人可以告诉我们这些容器和方法中的哪一个抛出bad_alloc(所以我会尝试在try / catch块中只放置那个特定的代码)

2 个答案:

答案 0 :(得分:0)

如果你没有使用它给你的dynamic_cast或任何其他功能,你可以关闭RTTI - 这可能会节省一些,但可能还不够。

我可以提供的唯一选择是分析您的内存使用情况,并优化您的代码,以便您可以释放不再需要的内容。

答案 1 :(得分:-1)

你问:“这个问题怎么解决?”

那么,问题是什么?

  1. “我没有足够的内存来运行我的程序” - 采购更多
  2. “我的程序使用了太多内存” - 少用
  3. 你不能以任何其他方式神奇地解决它。