c++ - 可以更改 std::string 容量以进行优化吗?

标签 c++ string memory

可以改变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 :

Some implementations may choose to round up the capacity slightly to their next larger internal "chunk size," with the result that the capacity actually ends up being slightly larger than the size.

关于c++ - 可以更改 std::string 容量以进行优化吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23935177/

相关文章:

c++ - 多线程应用程序中无锁队列的访问冲突

c++ - 当我们将引用分配给变量时会发生什么?

c++ - 为什么 sys socket recv 函数不填充数据而是返回字节长度?

c++ - 具有局部静态变量的 ID 生成器 - 线程安全?

c - C字符串操作中汉字的处理

c++ - Boost 单元测试内存重用导致本应无法通过的测试

java - 一次附加一个java字符串一个字符

c - 建立字典

c++ - 问 : memmove() and memcpy() on QT (c++)

c - 如何在不浪费 C 语言内存的情况下创建快速且巨大的 union 数组?