有没有一个STL接口兼容的字符串类,可以在栈上分配小字符串的内存(达到一定阈值)并在堆上为较大的字符串分配内存?
我正在寻求对程序进行优化,使用了许多小型本地字符串,这些字符串很容易适合栈上,而不是在堆上分配。
有没有一个STL接口兼容的字符串类,可以在栈上分配小字符串的内存(达到一定阈值)并在堆上为较大的字符串分配内存?
我正在寻求对程序进行优化,使用了许多小型本地字符串,这些字符串很容易适合栈上,而不是在堆上分配。
您可以为std::basic_string
提供自定义分配器(它是第三个模板参数)。这个答案解释了如何使用它,并链接到一个可用的堆栈分配器实现。
gcc 的 vstring (__versa_string) 实现可以进行小字符串优化,并具有 std 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 配合使用。