C ++ vector max_size (); - PullRequest
       30

C ++ vector max_size ();

14 голосов
/ 28 сентября 2010

В 32-битной системе.

  1. std::vector<char>::max_size() возвращает 2 32 -1, размер char - 1 байт
  2. std::vector<int>::max_size() возврат2 30 -1, размер int - 4 байта
  3. std::vector<double>::max_size() возвращает 2 29 -1, размер double - 8 байт

Может кто-нибудь сказать мне, max_size() зависит от чего?

и каково будет возвращаемое значение max_size(), если оно будет работать в 64-битной системе.

Ответы [ 3 ]

20 голосов
/ 28 сентября 2010

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

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

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

7 голосов
/ 28 сентября 2010

max_size () возвращает

максимальный потенциальный размер, который вектор может достичь из-за ограничений реализации системы или библиотеки.

, поэтому я полагаючто максимальное значение зависит от реализации.На моей машине следующий код

std::vector<int> v;
cout << v.max_size();

производит вывод:

4611686018427387903 // built as 64-bit target
1073741823 // built as 32-bit target

, поэтому формула 2 ^ (64-размер (тип)) - 1 выглядит корректно и для этого случая.

2 голосов
/ 09 июля 2018

Просто получите ответ по

Vector<data-type>v;
Cout<< v.max_size();

Или мы можем получить ответ по

(2^bit of system)/sizeof(datatype) -1
Eg for 64 bit system
Iong long datatype has size =8 bit
Ans =(2^64)/8 -1
2305843009213693951
...