2010-03-16 65 views
4

看起来像没有垃圾回收的动态内存分配是一种灾难。在那里悬着指针,内存泄漏在这里。很容易造成有时难以发现的错误,并且会造成严重的后果。当需要极高的可靠性时,如何处理动态内存分配?

在编写任务关键型程序时如何解决这些问题?我的意思是,如果我编写一个程序来控制像Voyager 1这样的太空船,它必须运行多年,并留下一个最小的泄漏,即泄漏可能会累积并迟早停止程序,当发生这种情况时,它会转化为史诗般的失败。

如何当一个程序需要非常可靠的动态内存分配处理?

+0

旅行者有3台电脑,总存储541KB的,更多的硬件规格在这里:http://voyager.jpl.nasa.gov/faq.html – Seth 2010-03-16 07:32:34

回答

3

这是同样的问题,作为一个长期运行的Web服务器或类似的加热和通风加热系统的嵌入式控制系统的东西。

当我在建筑能源管理部门工作了Potterton然后斯伦贝谢公司,我们没有使用动态内存分配。我们有固定大小的块。一个给定的块将被用于指定的目的,没有别的。块的大小决定了它们可能有多少,所以你可以选择具有这种功能的X和Y的功能等。

声音受到限制,但对于固定的离散任务来说就足够了。

其重要的,因为如果你错了,你可以炸毁的锅炉,并采取半与你校舍:-(

摘要:在某些情况下,你完全避免动态内存

4

通常在这样的情况下,内存不会动态分配。固定的内存部分用于存储参数和结果,并严格控制内存使用情况并进行高度测试。

0

人们还可以设计出具有容错系统在脑海中的bug通过试验得到的情况。检查点和恢复技术可以用于像Voyager这样的长时间运行的程序,但在实时性要求严格时可能很难实施。

1

即使没有垃圾回收和内存泄漏,经典的malloc /自由可以,如果你有碎片失败,所以静态存储器布局的唯一可靠方法,以保证不会出现任何问题。