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

前端之家收集整理的这篇文章主要介绍了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.f2er.com/c/117205.html

猜你在找的C&C++相关文章