看起来没有垃圾收集的动态内存分配是一种灾难。悬空指针在那里,内存泄漏在这里。很容易产生有时很难找到并且会产生严重后果的错误。
编写关键任务程序时如何解决这些问题?我的意思是,如果我编写一个控制像Voyager 1这样的太空船的程序,它必须运行多年并留下最小的泄漏,泄漏可能会累积并暂时停止程序,当这种情况发生时,它会转化为史诗般的失败。 / p>
当程序需要非常可靠时,如何处理动态内存分配?
答案 0 :(得分:4)
通常在这种情况下,内存不会动态分配。固定的内存部分用于存储参数和结果,内存使用受到严格控制和高度测试。
答案 1 :(得分:3)
这与长时间运行的Web服务器或加热和通风加热系统中的嵌入式控制系统等问题相同。
当我在Potterton和Schlumberger的建筑能源管理部门工作时,我们没有使用动态内存分配。我们有固定大小的块。给定的块将用于指定的目的而不是其他任何东西。块的大小决定了它们中有多少可能存在,因此您可以选择具有此X的X和该功能的Y等。
听起来很有限,但对于固定的离散任务来说已经足够了。
这很重要,因为如果你弄错了,你就可以炸毁一个锅炉并带走半个学校建筑物: - (
摘要:在某些情况下,您完全避免使用动态内存。
答案 2 :(得分:1)
即使没有垃圾收集和内存泄漏,如果你有碎片,经典的malloc / free也会失败,所以静态内存布局是保证不会出现问题的唯一可靠方法。
答案 3 :(得分:0)
如果通过测试获得错误,也可以设计具有容错能力的系统。可以想象,检查点和恢复技术可用于长期运行的程序,如Voyager示例,但在有严格的实时要求时可能很难实现。