std :: string :: reserve不荣幸地创建精确容量的std :: string

时间:2018-07-23 05:12:33

标签: c++ string memory

我正在尝试分配准确容量的字符串。这样做是为了节省内存。要创建的字符串大小是可变的,但需要事先知道。

我正在尝试使用储备金,但是容量不兑现,并且出现了超额分配。

  std::string str;
  str.reserve(21);
  str = "12345678901234567890";
  std::cout << "size: " << str.size() << "\n";
  std::cout << "length: " << str.length() << "\n";
  std::cout << "capacity: " << str.capacity() << "\n";

上面的输出如下:

size: 20
length: 20
capacity: 30
max_size: 9223372036854775807

我知道储备金是here所述的非约束性请求

是否有一些方法可以确保分配大小正确的字符串。

2 个答案:

答案 0 :(得分:4)

简而言之:,没有。

您可以精确控制string size ,但不能控制其容量。 C ++对实现应采用的容量没有任何限制-实现可以选择(认为)有效的任何方法。只有大小是固定的。

P.S。通常不认为几十个字节会浪费内存。 STL容器旨在在时间效率和空间效率之间进行折衷。

答案 1 :(得分:-6)

您可以使用以下内容:

std::string str;
str = "12345678901234567890";
str.shrink_to_fit();

输出如下:

size: 20
length: 20
capacity: 20