导致 sizeof() 为 32 的字符串结构中的开销是什么?
原文由 agam 发布,翻译遵循 CC BY-SA 4.0 许可协议
导致 sizeof() 为 32 的字符串结构中的开销是什么?
原文由 agam 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答2.7k 阅读✓ 已解决
最现代
std::string
实现1将非常小的字符串直接保存在堆栈中的静态大小的char
数组中,而不是使用动态堆存储。这称为 小(或短)字符串优化(SSO)。它允许实现避免小字符串对象的堆分配并提高引用的局部性。此外,将有一个
std::size_t
成员来保存字符串大小和一个指向实际char
存储的指针。具体实现的方式有所不同,但以下几行是可行的:
在
sizeof (void*)
= 8 的典型架构上,这给了我们 32 字节的总大小。1 “三巨头”(GCC 的 libstdc++ 版本 5,Clang 的 libc++ 和 MSVC 的实现)都做到了。其他人也可能。