2010-04-19 36 views
0

在嵌入式類型系統上,我創建了一個小型對象分配器,它可以支持標準內存分配系統。這個分配器是一個Boost :: simple_segregated_storage類,它正是我所需要的 - O(1)alloc/dealloc時間在一些內部碎片的代價下的小對象。我的問題是如何最好地聲明它。現在,它是在我們的mem代碼模塊中聲明的範圍靜態,這可能很好,但它感覺有點暴露在那裏,現在也永遠鏈接到該模塊。通常情況下,我將它聲明爲monostate或singleton,但是它使用動態內存分配器(其位於此處)。此外,在我們的系統上發生靜態對象初始化之前,我們正在初始化和使用動態內存分配器(同樣,內存管理器幾乎是引擎最基本的組成部分。)爲了解決這個問題,我添加了一個額外的'如果存在小內存分配器'來查看是否存在小對象分配器。如果現在必須在每個小對象分配上運行。在事情的計劃中,這幾乎可以忽略不計,但它仍然困擾着我。設計:如何聲明專用的內存處理程序類

所以問題是,有沒有更好的方法來聲明這部分內存管理器,它有助於從內存模塊解耦,也許不會花費額外的isinitialized()if語句?如果此方法使用動態內存,請解釋如何避免管理器的小對象部分初始化不足。

+0

我一直在ARM上設計這樣的事情。我見過的庫不是專爲具有8K或更少RAM的系統設計的。如果速度不重要,我希望垃圾收集的字符串/數組類可以在許多使用場景中最終需要不到常用庫的一半RAM(例如,外部引用會將'uint16_t'索引放入托管數組中引用;引用或原始字節的小數組會有兩個字節的開銷,引用每個需要兩個字節;較大的數組會有大約4%的額外開銷)。 – supercat 2015-03-02 18:31:40

+0

這樣的設計看起來是否合理?你知道這是否完成了嗎? – supercat 2015-03-02 18:31:57

回答

1

一個很好的指導方針是:說出你的意思,除非有充分的理由否則。這個分配器是一個全局靜態對象,應該這樣聲明。現在,如果它的狀態需要初始化,我會在初始化動態內存分配器的代碼中這樣做 - 因爲這實際上是初始化內存分配系統的一部分,這又屬於說明你的意思的標題。這樣可以避免對每個電話進行不雅的有條件檢查。

+0

這是我無法做到的原因,但我不記得是什麼。我會仔細檢查我的代碼並回復你。 – 2010-05-06 17:40:14

相關問題