Is the capa开发者_开发知识库city size of string always a multiple value of 15?
for example: In all cases the capacity is 15
string s1 = "Hello";
string s2 = "Hi";
string s3 = "Hey";
or is it random?
Is the capacity size of string always a multiple value of 15?
No; the only guarantee about the capacity of a std::string
is that s.capacity() >= s.size()
.
A good implementation will probably grow the capacity exponentially so that it doubles in size each time a reallocation of the underlying array is required. This is required for std::vector
so that push_back
can have amortized constant time complexity, but there is no such requirement for std::string
.
In addition, a std::string
implementation can perform small string optimizations where strings smaller than some number of characters are stored in the std::string
object itself, not in a dynamically allocated array. This is useful because many strings are short and dynamic allocation can be expensive. Usually a small string optimization is performed if the number of bytes required to store the string is smaller than the number of bytes required to store the pointers into a dynamically allocated buffer.
Whether or not your particular implementation performs small string optimizations, I don't know.
Implementation specific - std::String usually allocates a small starting string, 16bytes is common. It's a compromise between not having to do a realloc and move for very short strings and not wasting space
It's an implementation detail on which you're not supposed to rely on; to see exactly how std::string
grow in your implementation you can have a look at the sources of its CRT. In general it has an exponential grow.
精彩评论