Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > Visual C++ / MFC / WTL > vector и переход от 32 бит к 64


Автор: a_n_y_a 05.12.20, 05:41
Перенес проект из 32 бит в 64 бита, функция size() возвращает 8-ми байтовую переменную, но max_size() меньше! max_size() возвращает:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    768614336404564650  -  десятичное
    AAA AAAA AAAA AAAA‬  -  тоже шестнадцатеричное

Почему не F а А? Для 32 бит FFFFFFFF и 4294967295! И почему длина меньше на 4 бита?

Автор: MaIron 03.03.21, 10:03
Нужно смотреть пример.
max_size Вычисляется по формуле и зависит от типа переменной в векторе и от системы.

On 32 bit System.
std::vector<char>::max_size() returns 232-1, size of char — 1 byte
std::vector<int>::max_size() returns 230-1, size of int — 4 byte
std::vector<double>::max_size() returns 229-1, size of double — 8 byte

max_size () - это теоретическое максимальное количество элементов, которое может быть помещено в ваш вектор. В 32-битной системе теоретически можно выделить 4 Гб == 2 ^ 32, что составляет 2 ^ 32 символьных значения, 2 ^ 30 значений int или 2 ^ 29 двойных значений. Казалось бы, ваша реализация использует это значение, но вычитает 1.

Конечно, вы никогда не сможете выделить такой большой вектор в 32-битной системе; у вас закончится память задолго до этого.

Нет никаких требований относительно того, какое значение возвращает max_size (), кроме того, что вы не можете выделить вектор большего размера.
В 64-битной системе он может вернуть 2 ^ 64-1 для char или может вернуть меньшее значение, потому что система имеет только ограниченное пространство памяти.
В любом случае 64-битные ПК часто ограничены 48-битным адресным пространством.

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)