std :: string容量大小

时间:2011-02-17 17:47:32

标签: c++ string size

字符串的容量大小是否总是15的倍数?

例如:在所有情况下,容量都是15

string s1 = "Hello";

string s2 = "Hi";

string s3 = "Hey";

还是随机的?

3 个答案:

答案 0 :(得分:8)

  

字符串的容量大小是否总是15的倍数?

没有;关于std::string容量的唯一保证是s.capacity() >= s.size()

一个好的实现可能会以指数方式增加容量,因此每次需要重新分配底层数组时,它的大小都会翻倍。这是std::vector所必需的,因此push_back可以分摊常量时间复杂度,但std::string没有这样的要求。

此外,std::string实现可以执行小字符串优化,其中小于某些字符数的字符串存储在std::string对象本身中,而不是存储在动态分配的数组中。这很有用,因为许多字符串很短,动态分配可能很昂贵。如果存储字符串所需的字节数小于将指针存储到动态分配的缓冲区所需的字节数,则通常会执行小的字符串优化。

您的特定实现是否执行小型字符串优化,我不知道。

答案 1 :(得分:4)

具体实现 - std :: String通常分配一个小的起始字符串,16bytes是常见的。 这是在不必重新分配和移动非常短的字符串而不是浪费空间之间的妥协

答案 2 :(得分:0)

这是一个你不应该依赖的实现细节;要准确了解std::string在您的实施中如何增长,您可以查看其CRT的来源。一般来说,它呈指数增长。

相关问题