微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C字符串使用最大缓冲区分配?

我声明了一个变量字符串s;

并且做s =“abc”;现在它有3个字符的缓冲区.

s =“abcd”它有4个字符的缓冲区.

现在是第三个声明之后

s =“ab”问题是它会保留4个字符的缓冲区还是会重新分配2个字符的缓冲区?

如果它将分配2个字符缓冲区有任何方法我可以告诉它保持分配的最大缓冲区.

那么它是否保留了最大大小的缓冲区?

s = "ab"
s="abc"
s="a"
s="abcd"
s="b"

现在它应该保持4的缓冲区.

那可能吗?

解决方法

s = “ab” question is will it keep buffer of 4 words or will it
reallocate 2 word buffer ?

它不会重新分配缓冲区.我不知道它是否在标准中提到过,但我所见过的所有实现只有在需要增加容量时才会发出重新分配.永远不要减少.即使你有一个包含4个字符的字符串并调用.resize(2)或.reserve(2),容量也不会改变.为了强制字符串(或容器)重新分配内存以适应确切的大小,有一个简单的交换技巧

s.swap(string(s));

这里发生了什么?你创建一个临时的s,其容量将完全等于s.size(),然后将其与原始字符串交换.临时的析构函数将释放所有必要的资源.

同样,我并不认为这是标准的,但我见过的所有实现都有这种行为.

原文地址:https://www.jb51.cc/c/117205.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐