Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум на Исходниках.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-битным адресным пространством. |