@vladmd02

Почему максимальный размер объекта std::string равен 4611686018427387897?

В данном отрезке кода , я вывожу максимальную длину объекта std :: string :
string s;
cout<<s.max_size()<<endl;
cout << INT_MAX << endl;
cout<<LLONG_MAX<<endl;


Результат работы кода :
4611686018427387897
2147483647
9223372036854775807

Если не сложно, объясните, почему максимальный размер std :: string равен 4611686018427387897.
( Это примерно половина LLONG_MAX )
  • Вопрос задан
  • 143 просмотра
Решения вопроса 1
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Ну вот просто создатели библиотеки захардкодили именно это число.
Эта конструкция возвращает разные значения, в зависимости от компилятора, разрядности, опреационной системы.

Это 2^62-7. Почему 2^62? Может, в силу каких-то причин в вашей системе нельзя адресовать больше 62 бит. Может, система 2 бита для чего-то использует. Почему -7? Надо еще где-то хранить длину, надо оставить место для нулевого символа в конце и надо оставить нетронутым индекс std::string::npos - это значение используется для обозначения "несуществующего индекса". Конкретное значение зависит от того, что там программисты стандартной библиотеки сделали.

В любом случае, это значение на много-много порядков больше любой практически возможной длины строки. Ну не сможете вы выделить 4 экзобайта памяти.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы