最现代 std::string 实现1将非常小的字符串直接保存在堆栈中的静态大小的 char 数组中,而不是使用动态堆存储。这称为 小(或短)字符串优化(SSO)。它允许实现避免小字符串对象的堆分配并提高引用的局部性。 此外,将有一个 std::size_t 成员来保存字符串大小和一个指向实际 char 存储的指针。 具体实现的方式有所不同,但以下几行是可行的: template <typename T> struct basic_string { char* begin_; size_t size_; union { size_t capacity_; char sso_buffer[16]; }; }; 在 sizeof (void*) = 8 的典型架构上,这给了我们 32 字节的总大小。 1 “三巨头”(GCC 的 libstdc++ 版本 5,Clang 的 libc++ 和 MSVC 的实现)都做到了。其他人也可能。 原文由 Konrad Rudolph 发布,翻译遵循 CC BY-SA 4.0 许可协议
最现代
std::string
实现1将非常小的字符串直接保存在堆栈中的静态大小的char
数组中,而不是使用动态堆存储。这称为 小(或短)字符串优化(SSO)。它允许实现避免小字符串对象的堆分配并提高引用的局部性。此外,将有一个
std::size_t
成员来保存字符串大小和一个指向实际char
存储的指针。具体实现的方式有所不同,但以下几行是可行的:
在
sizeof (void*)
= 8 的典型架构上,这给了我们 32 字节的总大小。1 “三巨头”(GCC 的 libstdc++ 版本 5,Clang 的 libc++ 和 MSVC 的实现)都做到了。其他人也可能。