c++ - C++ Small String Optimized (SSO) 如何与容器一起工作?

标签 c++ performance stl containers

SSO 解释说小字符串是在堆上分配的:好的,但是当在容器内部构造时,这些内容不应该在堆栈上,因为容器可以在函数中创建并返回,而函数堆栈会过时。

所以我猜 SSO 不适用于 STL 容器,是吗?

最佳答案

“小串”和“大串”的区别,并不是存储在栈上还是堆上的区别。相反,不同之处在于间接级别

这意味着 std::string 对象可以保存指向实际字符串数据的指针,它可以是(几乎)任何长度,但具有间接动态内存的所有缺点 - 分配、释放、缓存未命中等。

或者,SSO 允许 std::string 将小字符串“就地”存储,就在 std::string 对象内部,无论它被分配到哪里。如果对象位于某个容器(在堆上)中,那么字符串将位于该位置,但它不需要像大字符串那样的其他间接寻址。

关于c++ - C++ Small String Optimized (SSO) 如何与容器一起工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41086259/

相关文章:

c++ - std::mt19937_64 比 std::mt19937 快吗?

c++ Lock类骨架

c++ - 不能在 vector 的 vector 上 emplace_back() 花括号初始化器

mysql - 加快 MySQL 字符串 LIKE 查询

c++ - 如何在STL中强制内联单个成员函数?

c++ - `std::vector<primitive>::clear()` 是常数时间操作吗?

c++ - 可变大小的 char[] - 可以吗?

c++ - 无法在 Borland C++ Builder 中打开包含文件 'inttypes.h'

javascript - 为什么使用 for 比 some() 或 filter() 更快

c++ - 辅助函数 : lambdas vs normal functions