相关疑难解决方法(0)

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

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

我希望:

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

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

你知道这样的图书馆吗?

c++ string performance memory-management

12
推荐指数
3
解决办法
7073
查看次数

std :: string是否使用字符串实习?

我特别感兴趣的是窗户,mingw.

谢谢.

更新:首先,我认为每个人都熟悉字符串实习. http://en.wikipedia.org/wiki/String_interning

其次,我的问题很详细:我为练习敲了一个字符串课.没有什么花哨的你知道,我只是在课堂上存储大小和char*.

我使用memcpy进行分配.

当我这样做来测量std :: string和我的字符串类的赋值速度时:

string test1 = "  65 kb text ", test2;
for(int i=0; i<1000000; i++)
   {
   test2 = test1;
   }

mystring test3 = "65 kb text", test4;
for (int i=0; i<1000000; i++)
   {
   test4 = test3
   }
Run Code Online (Sandbox Code Playgroud)

std :: string是一个很大的赢家.我在赋值运算符(在我的类中)中没有做任何事情,但是用memcpy复制.我甚至没有使用"new"运算符创建一个新数组,因为我检查大小是否相等,并且只在需要时请求new.怎么会?

对于小字符串,没有问题.我看不出如何能的std :: string赋值比memcpy的速度更快,我敢打赌,它使用它太在后台,或类似的东西,所以这就是为什么我问实习.

Update2:通过单个字符赋值修改循环,如下所示:test2 [15] = 78,我避免了std :: string的copy-on-write效果.现在两个代码完全相同(好的,有1-2%的差异,但这可以忽略不计).因此,如果我没有完全弄错,mingw std :: string必须使用COW.

感谢大家的帮助.

c++

1
推荐指数
3
解决办法
2499
查看次数

标签 统计

c++ ×2

memory-management ×1

performance ×1

string ×1