Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

std::string capacity size

Tags:

c++

string

size

Is the capacity 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?

like image 501
user3234 Avatar asked Dec 13 '22 15:12

user3234


2 Answers

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.

like image 199
James McNellis Avatar answered Dec 20 '22 21:12

James McNellis


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

like image 39
Martin Beckett Avatar answered Dec 20 '22 21:12

Martin Beckett