Это зависит от компилятора, размера целевого слова и версии стандартной библиотеки.
В системах до C ++ 11 было возможно (и довольно распространено) для std :: string to использовать механизмы копирования при записи (CoW). В этом случае я думаю, что реализации будут просто содержать указатель на объект реализации строки.
Пост C ++ 11, CoW был запрещен , а также стандарт требует std :: string :: length (), чтобы быть постоянным временем. Это последнее требование фактически обязывает реализации строк содержать по крайней мере указатель и поле длины. Добавьте к этому необходимость в «зарезервированном» поле (поскольку у std::string
может быть зарезервировано больше памяти, чем используется).
Вот несколько хороших ссылок на тему C ++ 11 и более поздних версий. std :: strings: