是否可以更改std::string容量以进行优化?
Can std::string capacity be changed for optimisation?
是否可以更改std::string容量以优化它?
例如:std::string name0 = "ABCDEABCDEABCDEF";
int cap = name0.capacity(); //cap = 31
int size = name0.size(); //size = 16
对于内存中的几个字符串来说,这是完全没问题的,但如果有数千个呢?这浪费了大量内存。那么使用char*不是更好吗?这样您就可以控制为特定字符串分配多少内存?
(我知道有些人会问为什么内存中有数千个字符串,但我想坚持我的问题,问字符串容量是否可以优化?)
如果你在问如何减少capacity()
以使其匹配size()
,那么c++ 11为此目的添加了shrink_to_fit()
,但请注意这是一个非绑定请求,因此允许实现忽略它。
name0.shrink_to_fit();
或者创建一个临时字符串并交换:
std::string(name0.begin(), name0.end()).swap(name0);
但是,这两种方法都不能保证为您提供与size()
匹配的capacity()
。来自GotW #54:
一些实现可能会选择将容量四舍五入到下一个更大的内部"块大小",其结果是容量实际上最终比大小略大。
相关文章:
- 空基优化子对象的地址
- 关闭||运算符优化
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 返回值优化:显式移动还是隐式
- 人脸跟踪arduino代码的优化
- 使用仅使用一次的变量调用的复制构造函数.这可能是通过调用move构造函数进行编译器优化的情况吗
- 具有非整数边容量的最大流量的Dinic算法
- 纯函数,为什么没有优化
- 为什么大多数 pair 实现默认不使用压缩(空基优化)?
- 将stl字符串缩小到小于15个字符的容量
- 如何以优化的方式同时迭代两个间距不相等的数组
- 小字符串优化(调试与发布模式)
- 浮点定向舍入和优化
- 在容量内调整矢量大小时的性能影响
- Visual Studio 调试优化如何工作?
- 为什么开关的优化方式与 c/c++ 中的链接不同?
- 线性优化目标函数中的绝对值
- GCC 会优化内联访问器吗?
- gcc 如何优化此循环?
- 是否可以更改std::string容量以进行优化?