C++ vecteur taille max();

sur système 32 bits.

  1. std::vector<char>::max_size() retourne la valeur 2 32-1, la taille de l' char - 1 octet
  2. std::vector<int>::max_size() retourne la valeur 2 30-1, la taille de l' int - 4 octets
  3. std::vector<double>::max_size() retourne la valeur 2 29-1, la taille de l' double - 8 octets

quelqu'un peut me dire max_size() dépend de quoi?

et quelle sera la valeur de retour de max_size() si elle fonctionne sur un système 64 bits.

10
demandé sur Kirill V. Lyadvinsky 2010-09-28 17:21:23

3 réponses

max_size() est le nombre maximal théorique d'éléments qui pourraient être mis dans votre vecteur. Sur un système 32 bits, vous pouvez en théorie attribuer 4Gb = = 2^32 ce qui est 2^32 char valeurs, 2^30 double valeurs. Il semblerait que votre implémentation utilise cette valeur, mais en soustrayant 1.

bien sûr, vous ne pourrez jamais allouer un vecteur aussi grand; vous manquerez de mémoire bien avant cela.

il n'y a aucune exigence sur la valeur max_size() les retours autres que celui que vous ne pouvez pas allouer un vecteur plus grand que cela. Sur un système 64 bits, il pourrait revenir 2^64-1 char, ou il pourrait retourner une plus petite valeur parce que le système n'a qu'un espace mémoire limité. Les PC 64 bits sont souvent limités à un espace d'adresse de 48 bits de toute façon.

19
répondu Anthony Williams 2010-09-28 13:31:14

max_size () retourne

donc je suppose que la valeur maximale dépend de l'implémentation. Sur ma machine le code suivant

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

produit de sortie:

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

donc la formule 2^(64-taille(type))-1 semble correcte.

7
répondu Vladimir 2010-09-28 13:31:09

il suffit d'obtenir la réponse par

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

Ou nous pouvons obtenir la réponse par

(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
1
répondu rahul sinha 2018-07-09 08:32:50