字符串类在堆栈上为小字符串分配?

时间:2011-03-24 12:23:29

标签: c++ string stl memory-management wstring

有没有人知道是否存在一个STL接口兼容的字符串类,它为堆栈上的小字符串分配内存(达到某个阈值),堆是否为更大的字符串?

我正在寻找优化程序,我正在使用很多很容易放在堆栈上的小型本地字符串,而不是在堆上分配。

4 个答案:

答案 0 :(得分:1)

您可以为std::basic_string提供自定义分配器(它是第三个模板参数)。 This answer解释了如何使用它并链接到可以使用的堆栈分配器的实现。

答案 1 :(得分:1)

来自gcc的vstring(__versa_string)实现可以执行小字符串优化并具有std字符串接口。如果您碰巧使用gcc,则很容易包含ext / vstring。否则,您可以将其改编为编译器/环境。

答案 2 :(得分:1)

这是一个古老的问题,但我觉得这比任何当前的答案都要好。

http://llvm.org/docs/ProgrammersManual.html#dss_smallstring

基本上它就是你想要的。 BTW tcmalloc增加了我的(设计糟糕:D)字符串分配密集程序10%的性能。 您还应该剖析以证明alloc是您的性能问题。

答案 3 :(得分:0)

__ versa_string SSO版本可以在堆栈上存储不超过15个字节,如果存在,它将保留16个字节,而不管字符串大小(http://codepad.org/2M7N9cTu)。

http://www.and.org/ustr/可以重用堆栈缓冲区,但在Debian Wheezy 64bit下我遇到了问题。

http://freecode.com/projects/str-class可以重用堆栈缓冲区。

我编写了一个仅使用标头的字符串类,它只使用了四个字节,可以重用堆栈缓冲区: http://code.google.com/p/libglim/source/browse/trunk/gstring.hpp
它具有有限的STL兼容性:basic_streambuf实现用于s​​td :: ostream。

相关问题