有谁知道是否有一个 STL 接口兼容的字符串类,它为堆栈上的小字符串(达到某个阈值)分配内存,为更大的字符串分配堆?
我正在寻找优化程序,并且我正在使用可以轻松放入堆栈的小型本地字符串,而不是在堆上分配。
有谁知道是否有一个 STL 接口兼容的字符串类,它为堆栈上的小字符串(达到某个阈值)分配内存,为更大的字符串分配堆?
我正在寻找优化程序,并且我正在使用可以轻松放入堆栈的小型本地字符串,而不是在堆上分配。
std::basic_string
您可以为(它是第三个模板参数)提供自定义分配器。这个答案解释了如何使用它并链接到可以使用的堆栈分配器的实现。
这是一个古老的问题,但我觉得这比当前的任何答案都好。
http://llvm.org/docs/ProgrammersManual.html#dss_smallstring
基本上它就是你想要的。BTW tcmalloc 在我的(设计糟糕的 :D)字符串分配密集型程序中提高了 10% 的性能。此外,您应该配置文件以证明 allocs 是您的性能问题。
gcc 的 vstring (__versa_string) 实现可以进行小字符串优化,并具有标准字符串接口。如果您碰巧使用 gcc,那么包含 ext/vstring 就很容易了。否则,您可以将其调整为适合您的编译器/环境。
__versa_string SSO 版本可以在堆栈上存储不超过 15 个字节,如果这样做,它会保留 16 个字节,无论字符串大小如何 ( http://codepad.org/2M7N9cTu )。
http://www.and.org/ustr/可以重用堆栈缓冲区,但我在 Debian Wheezy 64 位下与它链接时遇到问题。
http://freecode.com/projects/str-class可以重用堆栈缓冲区。
我写了一个只使用四个字节并且可以重用堆栈缓冲区的仅标头字符串类:
http
://code.google.com/p/libglim/source/browse/trunk/gstring.hpp
它具有有限的 STL 兼容性: basic_streambuf 实现与 std::ostream 一起使用。