2010-10-19 72 views
2

我正在使用RT OS在現有的嵌入式系統(內存有限,Flash有限, ...)上工作。所有的數據結構都有固定的大小,在「編譯時」分配爲 ,因此適用於RT。沒有動態內存 分配。編程語言是C++,但沒有STL可用。我 喜歡一些更通用的變種來代替某些數據結構特別的LinkedList,Vector和 地圖。靜態分配的數據結構

迄今爲止我見過的最接近的是如下框架: http://apfw.sourceforge.net/。 IMHO的最大缺點是,對於大小爲N的 LinkedList,T的默認構造函數被稱爲N次。更好的類應該靜態分配sizeof(T)* N個字節。

有誰知道我庫上述所有的限制?

+0

它最有可能在圖像靜態分配存儲空間。但是C++需要調用ctors。你還希望如何初始化T實例? – wilx 2010-10-19 11:43:23

+0

如果這個框架支持自定義分配器,你可以嘗試編寫你自己的分配器。 – sellibitze 2010-10-19 11:48:26

+0

@sellibitze。自定義分配器不受支持。 – azraiyl 2010-10-19 11:49:17

回答

1

你是否考慮過將自己的分配器(從靜態池分配)傳遞給STL容器?

除此之外,我不認爲這樣的事情存在。您可能想要查看this related question以開始使用靜態矢量類。如果你這樣做,考慮使它成爲開源。

+0

目前目標沒有STL。如果有足夠可用的Flash(下載鏈接是約2 KiBytes/s的串行線,所以即使我添加更多的Flash我有一個問題),我想用STL的O(1)內存分配器(如HTTP ://rtportal.upv.es/rtmalloc/)就可以了。我必須承認,我從來沒有嘗試過用小塊來切割STL。 – azraiyl 2010-10-19 12:27:44

1

如果您正在修復LinkedList的大小,爲什麼不創建自己的簡單類並通過數組備份它?

+0

因爲可能有10%的方法需要,比較STL提供的,這是可行的。我想,如果沒有人知道圖書館,我會寫我自己的課,在這裏發佈,讓專家來決定,我會怎樣。 – azraiyl 2010-10-19 11:45:33

1

我可以建議你如下:

http://www.codeproject.com/KB/recipes/Containers.aspx

這是我寫的容器類的anoter設計的文章。他們最大的優點之一是分配的數據和存儲它在容器中分開。

你可以在編譯時聲明你的靜態數據,然後在運行時插入/從/ list/tree /中移除它。