19

32ビットシステム。

  1. std::vector<char>::max_size()2 32 -1、サイズ-1charバイトを返します
  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ビットシステムで実行した場合の戻り値はどうなりますか。

4

3 に答える 3

30

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

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

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

于 2010-09-28T13:31:14.763 に答える
12

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は、その場合にも正しいように見えます。

于 2010-09-28T13:31:09.117 に答える
11

単に答えを得る

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

または、で答えを得ることができます(2^nativePointerBitWidth)/sizeof(dataType) - 1。たとえば、64ビットシステムでlong longは、(通常)8バイト幅なので、があり(2^64)/8 - 1 == 2305843009213693951ます。

于 2018-07-09T06:36:21.573 に答える