web-dev-qa-db-ja.com

C ++ベクトルmax_size();

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()が何に依存するか教えてもらえますか?

また、64ビットシステムで実行した場合のmax_size()の戻り値はどうなりますか。

15
Kundan

単に答えを得る

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
2
rahul sinha

max_size()は、ベクトルに入れることができるアイテムの理論上の最大数です。 32ビットシステムでは、理論的には4Gb == 2 ^ 32を割り当てることができます。これは、2 ^ 32 char値、2 ^ 30 int値、または2 ^ 29double値です。実装はその値を使用しているように見えますが、1を引いています。

もちろん、これほど大きなベクトルを実際に割り当てることはできません。それよりずっと前にメモリが不足します。

max_size()が返す値についての要件はありませんが、それよりも大きいベクトルを割り当てることはできません。 64ビットシステムでは、charに対して2 ^ 64-1を返す場合があります。または、システムのメモリスペースが限られているため、より小さな値を返す場合があります。とにかく、64ビットPCは48ビットアドレス空間に制限されることがよくあります。

21

max_size() 戻り値

システムまたはライブラリの実装上の制限により、ベクターが到達できる可能性のある最大サイズ。

したがって、最大値は実装に依存すると思います。私のマシンでは、次のコード

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

出力を生成します:

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

したがって、式2 ^(64-size(type))-1は、その場合にも正しいように見えます。

8
Vladimir