开发者

std::string capacity size

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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜