gpt4 book ai didi

c++ - 了解 std::string 的效率

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:38:58 25 4
gpt4 key购买 nike

我正在努力学习更多关于 C++ 字符串的知识。

考虑

const char* cstring = "hello";
std::string string(cstring);

std::string string("hello");

假设在应用程序的 .data 部分存储“hello”,然后将字节复制到堆上的另一个区域,由 std::string 管理的指针可以访问它们,我是否正确?

我怎样才能有效地存储一个非常非常长的字符串?我正在考虑一个从套接字流中读取数据的应用程序。我害怕连接很多次。我可以想象使用一个链表并遍历这个列表。

字符串让我害怕太久了!

任何链接、提示、解释和更多详细信息都将非常有帮助。

最佳答案

我已经毫无问题地存储了 10 或 100 MB 范围内的字符串。当然,它主要受可用(连续)内存/地址空间的限制。

如果您要附加/连接,有几件事可能有助于提高效率:如果可能,请尝试使用 reserve() 成员函数来预分配空间——即使您有一个粗略的最终大小可能有多大的想法,随着字符串的增长,它会避免不必要的重新分配。

此外,许多字符串实现使用“指数增长”,这意味着它们增长了一些百分比,而不是固定的字节大小。例如,它可能会在需要额外空间时将容量简单地翻倍。通过以指数方式增加大小,执行大量连接变得更加高效。 (具体细节取决于您的 STL 版本。)

最后,另一种选择(如果您的库支持的话)是使用rope<> 模板:绳索类似于字符串,只是在对非常大的字符串执行操作时效率更高。特别是,“绳索以小块分配,显着减少了大块引入​​的内存碎片问题”。关于 SGI's STL guide 的一些额外细节.

关于c++ - 了解 std::string 的效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5767199/

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