32ビットシステム。
std::vector<char>::max_size()
は2を返します32-1、サイズchar
—1バイトstd::vector<int>::max_size()
は2を返します30-1、サイズint
—4バイトstd::vector<double>::max_size()
は2を返します29-1、サイズdouble
—8バイト誰かが私にmax_size()
が何に依存するか教えてもらえますか?
また、64ビットシステムで実行した場合のmax_size()
の戻り値はどうなりますか。
単に答えを得る
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
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ビットアドレス空間に制限されることがよくあります。
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は、その場合にも正しいように見えます。