2010-03-09 90 views
1

在一個嵌入式程序中,我有一個屏幕對象需要管理一系列要顯示的項目。項目的初始列表將從屏幕加載的簡單數據庫中提取,列表將通過「添加」和「刪除」事件進行更新。這份清單需要按照一定的標準進行排序。我正在尋找一個可以幫助我完成此任務的容器類。此外,系統中沒有動態內存,所以我需要有一個空物品的內存池,當我完成物品時,我可以將其裝入容器並返回到空閒池。尋找容器和內存池解決方案

任何人都知道任何適當的C++標準庫或Boost?或者可能是另一種解決方案

回答

1

如果您使用標準容器(例如std::mapstd::set),則需要考慮不同的動態分配:內部容器數據結構的分配以及要存儲在容器中的自己數據的分配。內部數據結構的分配可以通過提供你自己的std :: allocator來定製(我相信你可以找到滿足你需求的一個,有很多可用的)。您自己的數據結構的分配需要分開處理,最常見的是通過執行類型特定的newdelete運算符。斯科特邁爾斯在他的一本書中有一篇關於這方面的文章。

另一種解決方案是使用Boost.Intrusive,一組容器,其中容器所需的所有內部數據項都存儲在您自己的數據結構中(這就是爲什麼它們被稱爲侵入式)。這樣可以讓您避免使用兩種不同的分配方案,因爲您只需要擔心自己的數據分配問題。

3

爲什麼不使用STL,但提供自己的分配器和釋放器,例如STL向量被定義爲template<class T,class A = std::allocator<T>> vector {},您可以創建並設置自己的分配器,從您的內存池請求內存空間。

至於內存分配器,您可以使用現有的內存分配器,如Hoard http://www.hoard.org/或Ned Allocator http://www.nedprod.com/programs/portable/nedmalloc/,這是相當高性能和良好的嵌入式系統。