内存高效的C ++字符串(实习,绳索,写时复制等)

时间:2009-07-12 13:23:19

标签: c++ string performance memory-management

我的应用程序存在内存问题,包括复制大量字符串,使用与许多哈希表中的键相同的字符串等。我正在为我的字符串寻找基类,这使得它非常有效。

我希望:

  • String interning(相同值的多个字符串使用相同的内存),
  • copy-on-write(我认为这几乎在所有std :: string实现中都是免费的),
  • 使用绳索的东西将是一个奖励(对于O(1)-ish concatenation)。

我的平台是Linux上的g ++(但这不太重要)。

你知道这样的图书馆吗?

4 个答案:

答案 0 :(得分:9)

  

copy-on-write(我认为这几乎在所有std :: string实现中都是免费的)

我不相信这种情况。通过迭代器修改字符串时,写时复制会导致问题:特别是,这会导致不需要的结果(即没有复制,两个字符串都被修改)或不必要的开销(因为迭代器不能纯粹根据指针实现) :他们需要在解除引用时执行额外的检查。)

此外,所有现代C ++编译器都执行NRVO,并且在大多数情况下无需复制返回值字符串。由于这是写时复制语义最常见的情况之一,因此由于上述缺点而被删除。

答案 1 :(得分:6)

如果您的大部分字符串都是不可变的,Boost Flyweight库可能符合您的需求。

它将执行字符串实习,但我不相信它会写入写入。

答案 2 :(得分:5)

Andrei Alexandrescu的'Policy Based basic_string implementation'可能有帮助。

答案 3 :(得分:2)

看看传奇人物Paul Hsieh的The Better String Library