Tro*_*yvs 0 c++ performance containers stl
SSO 解释说小字符串分配在堆上:好的,但是当在容器内构造时,这些内容不应该在堆栈上,因为容器可以在函数中创建并返回,而函数堆栈会过时。
所以我猜 SSO 不适用于 STL 容器,是吗?
“小字符串”和“大字符串”之间的区别并不是将其存储在堆栈或堆上的区别。相反,不同的是间接级别。
这意味着std::string对象可以保存指向实际字符串数据的指针,该数据可以是(几乎)任何长度,但具有间接动态内存的所有缺点 - 分配、释放、缓存未命中等。
或者,SSO 允许std::string在对象内部“就地”存储小字符串,std::string无论它分配在何处。如果对象位于某个容器(在堆上)中,则字符串将位于该容器中,但它不需要像大字符串那样的另一个间接寻址。