<分区>
Possible Duplicate:
What's the graceful way of handling out of memory situations in C/C++?
你好,
乍一看这似乎是一个简单的问题。而且我不想就什么是最好的方法来展开广泛的讨论....
上下文:Windows >= 5、32 位、C++、Windows SDK/Win32 API
但在询问了similar question之后,我阅读了一些 MSDN 和有关 Win32 内存管理的内容,所以现在我更加困惑如果分配失败该怎么办,比如说 C++ new 运算符。
所以我现在对您如何在您的应用程序中实现(如果您确实实现了,则隐含地)OOM 错误处理非常感兴趣。
如果,在哪里(主要功能?),针对哪些操作(分配),以及您如何处理 OOM 错误。
(我真的不是主观上的意思,把它变成一个偏好问题,我只是想看到不同的方法来解释不同的条件或适合不同的情况。所以请随意为 GUI 应用程序、服务提供答案 -用户模式的东西....)
一些对 OOM 的典型 react 来说明我的意思:
- GUI 应用:消息框、退出进程
- 非 GUI 应用:记录错误,退出进程
- 服务:尝试恢复,例如杀死引发异常的线程,但继续执行
- 关键应用:重试直到分配成功(减少请求的内存量)
- OOM 的手,让 STL/boost/OS 处理它
感谢您的回答!
解释得最好的方法将很荣幸成为一个被接受的答案 :D - 即使它只包含一个 MessageBox 行,但解释了为什么其他方法都是无用的、错误的或不必要的。
编辑:到目前为止,我很感谢您的回答,但我缺少一些实际的回答;我的意思是你们中的大多数人都说不要介意 OOM,因为当没有剩余内存(系统挂起/性能不佳)时您将无能为力。但这是否意味着避免对 OOM 进行任何错误处理?或者只在显示 MessageBox 的主界面中做一个简单的 try-catch?