C++字符串类效率

标签 c++ string performance

我有一个多年前写的旧字符串类(在标准库如此标准之前)。它工作正常,但我想我应该在我的最新项目中进入 21 世纪。我想知道标准库字符串类的效率如何。例如,如果我将一个字符串传递给一个函数,或者只是将它分配给另一个字符串,它会复制数据,还是简单地复制一个指向数据的指针。

在我以前的类(class)中,我保留了数据的引用计数,只是复制了指针。如果我做了一些修改字符串的事情,我会检查它的引用是否为 1。如果它是 1,我可以使用相同的字符串数据区域,假设字符串没有增长到超过它的原始大小。如果它大于 1,我会在修改之前复制它的字符串数据。

标准库类是否做了类似的事情(或希望更好),或者它是否在您每次传递字符串时复制数据。我想这可能取决于实现。我目前正在为 Windows 开发,尽管我可能稍后会移植它。谢谢

最佳答案

小字符串优化已被证明在大多数情况下比 COW 更有效。但这并不能保证一定会赢。它在很大程度上取决于它的使用方式。但是我认为你总是可以使用 std::shared_ptr<std::string>实现您的 COW 类并为您自己节省大量手动内存管理废话。

底线是,std::string 可能更好,但这里的细节可以改变它。尝试一下,但要小心。

关于C++字符串类效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50397964/

相关文章:

c++ - 32 位应用程序中的 WebBrowser 控件在 window.open() 调用上启动 64 位 Internet Explorer

c++ - (C++) 与命名空间链接导致重复符号错误

java - java中char数组到String数组的转换

performance - Powershell 远程处理性能

C++ 代码执行时间随不应该引入任何额外工作的小的源代码更改而变化

c++ - 如何将枚举类用作一组标志?

c++ - 将字符串放入堆栈 C++ 时出错

regex - 正则表达式以匹配两个单独的短语

string - 在 Rust 中将字符串中的每个字符加倍的最惯用方法

performance - double 运算 : 32-bit vs 64-bit machines