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

Pau*_*gar 12 c++ string performance memory-management

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

我希望:

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

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

你知道这样的图书馆吗?

Kon*_*lph 9

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

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

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

  • 更不用说多线程问题...... (4认同)
  • 此外,某些字符串具有较小的字符串优化,不使用堆,而是使用嵌入式小缓冲区来存储数据.但令人惊讶的是,GCC的默认字符串类(libstdc ++)会进行写时复制. (2认同)

Fer*_*cio 6

如果您的大部分字符串都是不可变的,那么Boost Flyweight库可能会满足您的需求.

它会进行字符串实习,但我不相信它会写入copy.


gra*_*eds 5

Andrei Alexandrescu的" 基于策略的basic_string实现 "可能有所帮助.