gpt4 book ai didi

c++ - std::string 及其自动调整内存大小

转载 作者:IT老高 更新时间:2023-10-28 23:14:57 27 4
gpt4 key购买 nike

我对 C++ 还很陌生,但我知道你不能像 std::string 类似乎让你那样随意使用内存。例如:

std::string f = "asdf";
f += "fdsa";

字符串类如何处理越来越大的问题?我假设它分配了一个默认的内存量,如果它需要更多,它 news 一个更大的内存块并将自己复制到那个。但是,每次需要调整大小时都必须复制整个字符串,这不是非常低效吗?我真的想不出另一种方法可以做到(但显然有人做到了)。

就此而言,所有 stdlib 类(如 vector 、队列、堆栈等)如何如此透明地处理增长和收缩?

最佳答案

您的分析是正确的——每次需要调整大小时复制字符串效率低下。这就是为什么常见的建议不鼓励使用模式。使用字符串的 reserve函数要求它为您打算存储的内容分配足够的内存。然后进一步的操作将填充该内存。 (但如果你的提示太小,字符串也会自动增长。)

容器通常还会尝试通过分配比它们需要的更多的内存来减轻频繁重新分配的影响。一个常见的算法是,当一个字符串发现它的空间不足时,它加倍它的缓冲区大小,而不是仅仅分配保存新值所需的最小值。如果字符串一次增长一个字符,这种加倍算法将时间复杂度降低到摊销线性时间(而不是二次时间)。它还降低了程序对内存碎片的敏感性。

关于c++ - std::string 及其自动调整内存大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3557591/

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