2011-09-18 67 views
1

我正在使用SFML,它通過std::vector<Uint32>和其他類似的處理大部分內存。所有聲明都使用默認的分配器。 SFML庫被編譯成靜態鏈接到Visual Studio中的.lib文件。 (如果需要,我擁有它的所有源代碼。)如何強制一個庫使用自定義的std :: allocator?

我的問題是什麼是強迫SFML使用我的自定義小對象/線程安全的分配器而不是STL容器的最痛苦的方法,而不是默認?我需要改變圖書館本身越少,當然就越好!

編輯

如果它幫助所有,忘記了圖書館的執行情況;我可以隨心所欲地重新編譯它。爲了這個問題,想象它是我正在使用的代碼。我的目標是改變所有STL容器使用的默認分配器,本質上。

EDIT2

如果不是可能的話,將覆蓋new本身是正確的方法是什麼?我已經讀過,默認的分配器只不過是新增/刪除操作中的糖衣。

+0

「custom'std :: allocator'」是有點用詞不當。如果它是自定義的,這不是標準的。而SFML絕對使用'std :: vector >'。 – MSalters

回答

2

好,最「暴力破解」或簡單的方法似乎創建實現的malloc /免費的預加載庫(和朋友嗎?)

這通常是在堆調試器/界限跳棋的運作方式。

但是,我對SFML分配器的要求一無所知,所以如果空間非常有限,它可能無法工作。在這種情況下,我建議「編組」(複印看中字)需要

切向有關時,轉移到定製的分配區中的數據:

普電子藝術有遊戲開發一個STL的「端口」。它適合自定義分配器(實際上,它沒有默認的分配器!)。你可以看看

+0

我會看看那個,謝謝! –

+0

關於這個問題的二讀,我想只有EASTL參考是你正在尋找的。最初我以爲你想要外部鏈接的代碼來使用你的自定義分配器。這讓我覺得'hook malloc/free':) – sehe

0

要更改默認的新的運營商,只是實現這個功能(在全局範圍):

void* operator new (std::size_t size) throw (std::bad_alloc); 

您可能在那裏找到更多的信息:http://www.cplusplus.com/reference/new/operator%20new/

我不完全確定它可以與動態庫一起工作。

相關問題