如何释放字符串的未使用容量

6 c++ string memory-management visual-c++

我在程序中处理了很多字符串.这些字符串数据在读入我的程序后不会在整个生命周期内发生变化.

但由于C++字符串保留了容量,因此它们浪费了大量空间,而这些空间无法确定.我试图释放这些空间,但它没有用.

以下是我尝试过的简单代码:

string temp = "1234567890123456";
string str;

cout << str.capacity() << endl;   

str.reserve(16);    
cout << str.capacity() << endl;     
// capacity is 31 on my computer    

str += temp;    
cout << str.capacity() << endl;    

str.reserve(16);    
cout << str.capacity() << endl;     
// can't release. The capacity is still 31.
Run Code Online (Sandbox Code Playgroud)

(编译器是Visual C++)

我该怎么发布呢?

Joh*_*lla 12

当您致电时reserve,您正在请求更改容量.实现仅保证保留等于或大于此数量的数字.因此,特定实现可以安全地忽略缩小容量的请求.

但是,我鼓励您考虑这是不是过早优化.你确定你真的在制作这么多字符串,这对你来说是一个内存瓶颈吗?你确定它实际上是内存是瓶颈吗?

从以下文档reserve:

这可以扩展或缩小字符串中存储空间的大小,但请注意,调用此函数后产生的容量不一定res_arg 等于或大于等于res_arg,因此收缩请求可能会也可能不会产生实际减少特定库实现中的已分配空间.在任何情况下,它永远不会修剪字符串内容(为此目的,请参阅调整大小或清除,修改内容).


JRL*_*JRL 5

你为什么不使用char数组呢?