- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在编写一个类来保存图的连接组件的状态,支持动态连接,并且每次删除或添加新边时,我都必须重新计算相邻组件以连接或拆分它们。
这些方法唯一可以抛出的异常是 std::bad_alloc
.我的任何依赖项都不会抛出其他异常。因此,唯一可能的异常(exception)是由于 std::unordered_set<...>::insert
之类的方法导致内存不足。或 std::deque<...>::push_back
.
这使我的算法设计变得非常复杂,因为我必须处理本地数据以保存差异,然后根据这些缓存的修改将所有修改移动到范围明确的 try-catch
中。 block 。
可读性大大降低,思考和编写异常安全代码的时间增加了很多。此外,内存过量使用使得处理此异常变得毫无意义。
遇到这种情况你会怎么做?确保异常安全的代码真的很重要吗,如果内存确实不足,您的代码可能无论如何都会失败,但可能稍后,整个程序也会失败?
因此,简而言之,是否值得处理内存不足异常,正如一条评论所指出的,考虑到同样的异常抛出机制也可能耗尽内存?
最佳答案
正如您所建议的,尝试在一个进程中优雅地处理内存不足的情况介于极其困难和不可能之间,具体取决于您正在运行的操作系统的内存行为。在许多操作系统(例如使用默认设置配置的 Linux)上,内存不足的情况可能会导致您的进程在没有任何警告或求助的情况下被简单地杀死,无论您的代码如何小心地尝试处理 bad_alloc
异常。
我的建议是让您的应用程序启动一个子进程(即它可以将自己作为子进程启动,并带有一个特殊的参数让子进程知道它是子进程而不是父进程)。然后父进程只是等待子进程退出,如果退出,它会重新启动子进程。
这样做的好处是不仅可以从内存不足的情况中恢复,还可以帮助您从可能导致子进程崩溃或过早退出的任何其他问题中恢复。
关于c++ - 编写 "anti-lack of memory"异常安全代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57856496/
在数据库中,您有一个带有位字段的表,我们将该字段称为Active 在应用程序中你有一个 bool 变量,我们称之为NotActive 每次从表中获取字段时,在应用程序中您都会切换变量的含义。 NotA
我在我的 iPhone 应用程序中查看一些动画,感觉它有点难看。然后我明白了:它只是不通过子像素状态进行动画处理。 所以,如果我使用通常的+beginAnimations/+commitAnimati
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
我记得在某处看到过有关此问题的辩论,并且目前正在考虑删除我正在处理的系统中的每个业务对象都继承自的基础对象。它包含一些属性、一些数据库逻辑和一些构造函数逻辑。 这是一种反模式,还是陪审团还在外面?有一
我正在从事一个人脸识别项目,我可以首先注册自己,然后启动一个识别脚本,该脚本将启动我的网络摄像头,它会识别我自己。我正在关注这个 article它的工作非常好。 我注意到的是,如果我将我的照片展示给相
我在软编码反模式上感到Wikipedia entry简洁而令人困惑。那么什么是软编码?在什么设置下,这是不好的做法(反模式)?另外,什么时候可以认为它是有益的,如果是这样,应该如何实施? 最佳答案
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 3年前关闭。 Improve t
Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。 想改善这个问题吗?更新问题,以便将其作为on-topic
我正在努力让自己深入了解 JavaScript,目前正在学习它。 在数组中,我一直在读到下面是一个反模式: var a = new Array("a", "b", "c"); 下面的不是: var a
我正在研究著名的 SQLzoos 的第一个问题,并且正在研究 using Null 部分:http://sqlzoo.net/wiki/Using_Null 问题是: List the teacher
在 Java 中,有 Graphics2D.fillRect(x, y, width, height) 函数。在我的程序中,我正在寻找类似但完全相反的东西。 我需要填充屏幕上的所有内容,除了这个特定的
我正在尝试实现一种算法,从一组 n 个元素中获取 k 个元素的所有组合,其中两个连续组合之间的差异被最大化(类似反向格雷码)。换句话说,应该对组合进行排序以避免元素连续出现两次,这样就不会不必要地区分
来自 http://ark.intel.com我可以找到支持它的处理器。但是如何以编程方式检测它呢? (C++,C#)。 对于 Intel 的芯片组,我发现 FVEC2(特征向量寄存器)用于检测是否启
我正在阅读 O'Reilly 的“Android 编程”一书,我正在努力研究从第 99 页开始的“覆盖和回调”部分。他们将此作为优秀代码的示例: public class MyModel {
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
搜索示例 搜索 123,网页地址为:https://www.virustotal.com/gui/search/123/comments 请求接口 GET /ui/search?limit=
程序员经常会注意到他在几个地方有一些非常相似的代码。假设这里有类似代码的实例。 (为了清晰起见,这是一个玩具示例。在野外,这种反模式通常不会出现在如此简单的代码中) function showLogi
我使用了 highcharts 库中的基本折线图,但我认为线条不够平滑。 有可能改进吗? 我的代码: chart: { type:'line',
创建 JavaFX 场景时,我传入 SceneAntialiasing.BALANCED 作为参数,但在我的笔记本电脑上它给了我这个警告: WARNING: System can't support
我是一名优秀的程序员,十分优秀!