2010-03-16 70 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 /自由可以,如果你有碎片失敗,所以靜態存儲器佈局的唯一可靠方法,以保證不會出現任何問題。