gpt4 book ai didi

c++ - std::string 是如何实现的?

转载 作者:IT老高 更新时间:2023-10-28 13:58:49 33 4
gpt4 key购买 nike

我很想知道 std::string 是如何实现的,它与 c 字符串有何不同?如果标准没有指定任何实现,那么任何带有解释的实现都会很好地满足标准给出的字符串要求?

最佳答案

实际上,我使用的每个编译器都提供了运行时的源代码 - 因此,无论您使用的是 GCC 还是 MSVC 或其他什么,您都可以查看实现。但是,std::string 的很大一部分或全部将被实现为模板代码,这可能会导致非常难以阅读。

Scott Meyer's book, Effective STL ,有一章是关于 std::string 实现的一章,它是对常见变体的一个不错的概述:“第 15 条:注意 string 实现中的变体”。

他谈到了 4 种变体:

  • 引用计数实现的几个变体(通常称为写入时复制) - 当字符串对象被原封不动地复制时,引用计数会增加,但实际的字符串数据不会。两个对象都指向相同的引用计数数据,直到其中一个对象修改它,从而导致数据的“写入时复制”。变化在于存储引用计数、锁等内容的位置。

  • “短字符串优化”(SSO) 实现。在这个变体中,对象包含通常指向数据的指针、长度、动态分配缓冲区的大小等。但是如果字符串足够短,它将使用该区域来保存字符串,而不是动态分配缓冲区

另外,Herb Sutter's "More Exceptional C++"有一个附录(附录 A:“不是(在多线程世界中)的优化”)讨论了为什么写时复制引用计数的实现由于同步问题而经常在多线程应用程序中出现性能问题。那篇文章也可以在网上找到(但我不确定它是否与书中的内容完全相同):

这两章都值得一读。

关于c++ - std::string 是如何实现的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1466073/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com