3

据我了解,当程序内存不足时,会触发 C++ 中的 std::bad_alloc 异常。有没有办法在我们到达不归路之前监控剩余的内存量并触发一个特殊的例程?

4

1 回答 1

5

不,但是您可以使用 注册一个处理程序std::set_new_handler,全局的默认实现operator new()在循环中执行,直到处理程序不返回或没有注册进一步的处理程序。处理程序本身可能会尝试释放更多内存,或发布日志消息或类似的东西。

但是,分配函数可用内存量的具体细节在很大程度上取决于您的平台和操作系统,所以不要期望太多。

例如,在超额订阅内存的系统上,您的分配可能会成功,但您的程序仍然可能因为系统内存不足而死掉。

于 2012-11-05T16:06:05.617 回答