我正在一個安全的嵌入式系統中工作,並且我想修改一下異常處理。 __cxa_allocate_exception
正在使用malloc()
爲異常對象分配內存。 malloc
/new
在安全應用程序中是不允許的,所以我必須重寫它。修改不使用malloc的「__cxa_allocate_exception」
現在我的問題:有沒有辦法避免malloc在這種情況下?
一些替代方案是:
- 使用靜態緩衝區,這將導致在多任務/多核心應用程序的問題,所以我不能做到這一點。
- 在堆上寫入也會導致一些麻煩,因爲堆可能已滿(內存不足不會工作)。
- 最後,也許我可以分配(例如)16kb的任務堆棧空間,每個異常對象將有一個1kb的常量大小。這樣,我可以處理多達16個例外。如果它有任何意義或者甚至是可能的,我對這個堆棧的理解可悲的是很低,要評估它。
線程局部變量是一個可行的解決方案嗎? – arrowd
你真的*需要*例外嗎?在小型嵌入式系統中,異常通常是一個壞主意。更不用說在C++中拋出異常通常非常昂貴,所以應該只用於真正的異常事件。 –
預先保留內存會增加內存不足的風險,而不是減少內存。 –