我正在程序中处理很多字符串。
这些字符串数据在读入我的程序后的整个生命周期内都不会改变。
但由于 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++)
我怎样才能释放它?
你打电话时reserve
,你正在做一个request来改变容量。实现仅保证保留等于或大于此数量的数量。因此,请求shrink特定实现可以安全地忽略容量。
但是,我鼓励您考虑这是否不是过早的优化。您确定您真的创建了如此多的字符串,这对您来说是内存瓶颈吗?您确定内存确实是瓶颈吗?
从文档中reserve
:
这可以扩大或缩小
字符串中的存储空间,
尽管注意到由此产生的
调用此函数后的容量
不一定等于res_arg
但可以等于或大于
比res_arg
,因此收缩
请求可能会也可能不会产生
分配的实际减少
特定图书馆的空间
执行。无论如何,它永远不会
修剪字符串内容(为此
目的,请参阅调整大小或清除,其中
修改内容)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)