Возможно, я ошибаюсь, но думается, что единственный толковый способ обеспечить в реализации std::string эффективную работу методов data() и c_str() -- это хранить в std::string всего один буфер, размер которого больше длины строки хотя бы на один символ. Чтобы в этом "хвостике" держать 0-символ, необходимый для c_str().
Получается, что если мне нужно хранить в программе 3M объектов std::string, то эти самые 0-символы будут съедать 3MiB RAM. Что несколько обидно в случаях, когда ни одна их этих строк для C-шных вызовов не используется.
Понятно, что в процентном отношении эти накладные расходы невелики, даже в 32-битовом коде, и они еще меньше в 64-битовом... Но все равно обидно :)
Комментариев нет:
Отправить комментарий