gpt4 book ai didi

c++ - std::string 什么时候重新分配内存?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:44:45 24 4
gpt4 key购买 nike

当使用 std::string 对象并且我想向它添加字符时,它会预先分配一些内存,还是只分配我需要的内存?

准确地说:

 std::string s;
s.reserve(20);
char c = 'a';
s = "";
for(int i = 0; i < 25; i++)
s += c;

在上面的例子中,我预留了一定量的内存。现在当我清除字符串时,是否会导致保留的内存被丢弃?在循环中它会填满预留内存然后每次重新分配额外的 5 个字符吗?

最佳答案

没有要求 std::string 在您分配一个空字符串给它时释放分配的内存。当您为其分配一个短字符串时也不会。唯一的要求是,当它分配内存以容纳更大的字符串时,分配必须以实现摊销常数时间的方式进行。一个简单的实现是每次需要更多空间时增长 2 倍。

如果希望字符串的容量最小化,可以在 C++11 中使用 string::shrink_to_fit()。在 C++11 之前,有些人在需要减少容量时诉诸“交换技巧”。

关于c++ - std::string 什么时候重新分配内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25974085/

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