Что означает «на месте без выделения памяти» для глупой реализации String? - PullRequest
0 голосов
/ 26 мая 2020

Из документации Folly

Small strings (<= 23 chars) are stored in-situ without memory allocation.
Medium strings (24 - 255 chars) are stored in malloc-allocated memory and copied eagerly.
Large strings (> 255 chars) are stored in malloc-allocated memory and copied lazily.

Где хранятся эти «маленькие строки»?

1 Ответ

1 голос
/ 26 мая 2020

Это означает, что стоимость std::string уже включает 23 символа. Что-то еще требует дополнительных выделений.

Это означает, что внутренне структура выглядит примерно так:

struct string {
  // ...
  char internal[23];
  char* external;
};

Это, по-видимому, делает копирование коротких строк очень дешевым, поскольку не требуется выполнять операции с кучей, плюс для очистки не требуется никаких вызовов delete.

...