
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.206.194.21] |
![]() |
|
Сообщ.
#1
,
|
|
|
Перенес проект из 32 бит в 64 бита, функция size() возвращает 8-ми байтовую переменную, но max_size() меньше! max_size() возвращает:
![]() ![]() 768614336404564650 - десятичное AAA AAAA AAAA AAAA - тоже шестнадцатеричное Почему не F а А? Для 32 бит FFFFFFFF и 4294967295! И почему длина меньше на 4 бита? |
Сообщ.
#2
,
|
|
|
Нужно смотреть пример.
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-битным адресным пространством. |