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.

(编译器是Visual C)

我该怎么发布呢?

解决方法

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

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

从保留文件

This can expand or shrink the size of
the storage space in the string,
although notice that the resulting
capacity after a call to this function
is not necessarily equal to @H_301_28@res_arg
but can be either equal or greater
than @H_301_28@res_arg,therefore shrinking requests may or may not produce an actual reduction of the allocated space in a particular library implementation. In any case,it never trims the string content (for that purposes,see resize or clear,which modify the content).

相关文章

/** C+⬑ * 默认成员函数 原来C++类中,有6个默认成员函数: 构造函数 析构函数 拷贝...
#pragma once // 1. 设计一个不能被拷贝的类/* 解析:拷贝只会放生在两个场景中:拷贝构造函数以及赋值运...
C类型转换 C语言:显式和隐式类型转换 隐式类型转化:编译器在编译阶段自动进行,能转就转,不能转就编译...
//异常的概念/*抛出异常后必须要捕获,否则终止程序(到最外层后会交给main管理,main的行为就是终止) try...
#pragma once /*Smart pointer 智能指针;灵巧指针 智能指针三大件//1.RAII//2.像指针一样使用//3.拷贝问...
目录&lt;future&gt;future模板类成员函数:promise类promise的使用例程:packaged_task模板类例程...