c++ - 如何编写高效的字符串缓冲区

标签 c++ string performance buffer

我需要一种构建字符串的方法。我不知道大小,它必须非常有效。 今天我用这个:

std::strstreambuf* sBuf = new std::strstreambuf(20*1024*1024);
std::ostream* outS = new std::ostream(sBuf);
(*outS) << ... << ...
... 
CString outputStr = (*outS).str();

在对此进行分析时,我可以看到 operator<< 需要很长时间。它的溢出函数被调用,并且需要很长时间(我的处理时间的 25%)。我不明白为什么

  1. 为什么会调用 overflow?为什么要花这么多时间?
  2. 有没有更有效的方法来做到这一点?

最佳答案

我假设 overflow 被调用,因为缓冲区中没有足够的空间。现在,当新分配的缓冲区再次只提供一个小的放大时,overflow 将很快再次被调用。

为了克服这种情况,可能值得使用自定义分配器实现 std::basic_stringbuf,这反过来会分配更多空间或更智能地进行分配,例如如果以前的分配非常大,则分配更多等等。 “std compliant stringstream using stack allocated storage?”中提供了一个粗略的想法。

关于c++ - 如何编写高效的字符串缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20946352/

相关文章:

sql - MySQL中如何使用GROUP BY连接字符串?

c - 快速创建随机数组

c++ - Typedef数组指针参数的C++ ostream重载

c++ - eclipse 和 VC++6 : NMAKE fatal error U1073

string - 使用 gmatch 捕获来索引表

java - 当从用户那里读取其中一个时,为什么不是 "Ellie"== "Ellie"?

performance - VBA 图表操作缓慢

mysql - 查询效率——从表中选择最新的2条 “group/batch”记录

c++ - Qt QPainter在paintEvent中消除用paintGL绘制的图形

C++ - 将 AM/PM 时间字符串转换为 posix 时间 ptime