c++ - 节省内存的 C++ 字符串(interning、ropes、copy-on-write 等)

标签 c++ string performance memory-management

我的应用程序存在内存问题,包括复制大量字符串、使用与大量哈希表中的键相同的字符串等。我正在为我的字符串寻找一个基类,以使其非常高效。

我希望:

  • 字符串实习(相同值的多个字符串使用相同的内存),
  • 写时复制(我认为这在几乎所有 std::string 实现中都是免费的),
  • 带有绳索的东西将是一个奖励(对于 O(1)-ish 连接)。

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

你知道这样的图书馆吗?

最佳答案

copy-on-write (I think this comes for free in nearly all std::string implementations)

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

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

关于c++ - 节省内存的 C++ 字符串(interning、ropes、copy-on-write 等),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1116040/

相关文章:

c++ - 从 map 中删除指向已删除对象的所有条目

c++ - 在 OpenGL 中绘制扭曲平面的正确方法是什么?

swift - 我可以将关联对象添加到 Swift Struct 吗?

java - 提高java方法的效率

c++ - 将可变数量的参数传递给嵌入式 Python API

c++ - 标准库是否提供检查 double 是否与整数相同的函数?

java - 拆分功能问题?

java - 无法将数据从 firebase 添加到字符串数组

WPF 性能缓慢 - 许多 DataItem=null 绑定(bind)警告

performance - 有什么方法可以改善构建/编译时间?