我有大量使用STL容器和字符串的大型(> 250個文件)庫的源代碼。我需要在一個有限的堆的嵌入式環境中運行它,所以我想確保這個庫本身在堆的使用上受到限制。替換默認的STL分配器
顯而易見的解決方案是創建一個分配器,但修改整個代碼庫以包含分配器模板參數是最後一招,而且如果我想要採用新版本的源代碼,這是不可取的。全局替換新的和刪除是不可行的,因爲它會影響整個圖像,而不僅僅是這個庫。
我的下一個想法是愚蠢的C代碼宏伎倆,但似乎並不像它會是可能的,雖然我承認我不是一個聰明的宏作者。
所以我想「有沒有編譯器或編譯開關來指定分配<>在編譯時類」?但我對任何事情都是開放的。
下一個問題我要問,如果有人能拿出一個解決方案,是怎麼做的新的同/設定包括這個庫文件中刪除。
我用gcc 3.4.4工具鏈在Cygwin下運行它,用的VxWorks的目標,如果火花任何想法。
gcc 3.4.4這已經足夠老了,被標記爲「完全破碎」。任何你不換用新版本的原因? – sehe
我認爲在GCC中,這只是一個簡單的宏,在內部應該可以切換。默認是「新的分配器」,但GCC帶有幾個選擇,比如「malloc分配器」和池分配器等等。 –
假設你可以創建一個有限的堆,然後只爲這個庫重載'operator new',所以庫中的所有'operator new'調用都會進入你有限的堆。當有限的堆滿了並且調用了重載的'operator new'時,你想要什麼樣的行爲?你真的想在這種情況下讓'operator new'失敗嗎?我不相信你會這樣,除非這個庫在'operator new'失敗時仍然可以運行。也許如果庫是一個數據庫緩存,或類似的東西。圖書館做什麼? –