字符串的容量大小是否总是15的倍数?
例如:在所有情况下,容量都是15string s1 = "Hello";
string s2 = "Hi";
string s3 = "Hey";
还是随机的?
答案 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的来源。一般来说,它呈指数增长。