我的應用程序有內存問題,包括複製大量字符串,使用相同的字符串作爲許多哈希表中的鍵等。 m爲我的字符串尋找一個基類,這使得它非常高效。內存有效的C++字符串(內聯,繩索,寫時拷貝等)
我希望的:
- 字符串實習(相同值的多個字符串使用相同的內存),
- 寫入時複製(我認爲這免費的午餐,在幾乎所有性病::字符串實現),
- 帶繩索的東西將是一個獎金(O(1) - 串聯)。
我的平臺是Linux上的g ++(但這不太可能)。
你知道這樣的圖書館嗎?
我的應用程序有內存問題,包括複製大量字符串,使用相同的字符串作爲許多哈希表中的鍵等。 m爲我的字符串尋找一個基類,這使得它非常高效。內存有效的C++字符串(內聯,繩索,寫時拷貝等)
我希望的:
我的平臺是Linux上的g ++(但這不太可能)。
你知道這樣的圖書館嗎?
如果大部分字符串都是不可變的,那麼Boost Flyweight庫可能適合您的需要。
它會做的字符串interning,但我不相信它在寫時複製。
寫入時複製(我認爲這免費的午餐,在幾乎所有的std :: string實現)
我不相信這種情況不再。通過迭代器修改字符串時,寫入時複製會導致問題:特別是,這會導致不需要的結果(即無副本,並且兩個字符串都被修改)或不必要的開銷(因爲迭代器不能純粹用指針:它們在被解除引用時需要執行額外的檢查)。
此外,所有現代C++編譯器都執行NRVO,並且在大多數情況下不需要複製返回值字符串。由於這是寫時複製語義的最常見情況之一,由於上述缺點,它已被刪除。
更不用說多線程問題了...... – 2009-07-12 14:46:44
此外,一些字符串有一個小的字符串優化,不是使用堆,而是使用嵌入式小緩衝區來存儲數據。令人驚訝的是,GCC的默認字符串類(libstdC++)在寫時複製。 – 2009-07-12 17:13:28
C++ 11禁止COW字符串類 – Ghita 2013-06-07 12:13:59
看看The Better String Library從傳說中的保羅·謝
安德烈Alexandrescu的的「Policy Based basic_string implementation」可能會有幫助。
如果我用它來包裝一個std :: string,它看起來好像不會損害copy-on-write。 – 2009-07-12 13:37:59