std :: размер строки - PullRequest
       2

std :: размер строки

4 голосов
/ 17 февраля 2011

Всегда ли размер емкости строки кратен 15?

, например: Во всех случаях емкость составляет 15

string s1 = "Hello";

string s2 = "Hi";

string s3 = "Hey";

или это случайно?

Ответы [ 3 ]

8 голосов
/ 17 февраля 2011

Размер строки всегда кратен 15?

Нет;единственная гарантия емкости std::string заключается в том, что s.capacity() >= s.size().

. Хорошая реализация, вероятно, будет наращивать емкость экспоненциально, так что она удваивается в размере каждый раз, когда требуется перераспределение базового массива.Это требуется для std::vector, чтобы push_back мог иметь амортизированную постоянную сложность по времени, но для std::string.

такого требования нет. Кроме того, реализация std::string может выполнять небольшие строковые оптимизации, гдеСтроки, меньшие некоторого количества символов, хранятся в самом объекте std::string, а не в динамически размещаемом массиве.Это полезно, потому что многие строки короткие и динамическое распределение может быть дорогим.Обычно небольшая оптимизация строки выполняется, если количество байтов, необходимое для хранения строки, меньше, чем количество байтов, необходимое для хранения указателей в динамически распределенном буфере.

Независимо от того, выполняет ли ваша конкретная реализация небольшие строковые оптимизации, я не знаю.

4 голосов
/ 17 февраля 2011

Конкретная реализация - std :: String обычно выделяет небольшую начальную строку, обычно 16 байтов. Это компромисс между отсутствием необходимости делать realloc и перемещением для очень коротких строк и не тратить пространство

0 голосов
/ 17 февраля 2011

Это деталь реализации, на которую вы не должны полагаться; Чтобы точно увидеть, как растет std::string в вашей реализации, вы можете взглянуть на источники его CRT. В целом он имеет экспоненциальный рост.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...