4

ベクトルを作成してサイズを変更して最大数のアイテムを保持しようとすると (vector::max_size())、実行時にデバッグ エラーが発生します。

「無効な割り当てサイズ: 429467292」

max_size() がベクトル内のアイテムの最大数を返す必要がある場合、なぜこれをサイズ変更できないのか疑問に思っています...

vector<int> vc;
vc.resize(vc.max_size());

また、VS2010 で LARGADRESSAWARE:On を有効にしようとしましたが、それは役に立ちません。これは正論だったのだろうか…

手がかりを得た人はいますか?

4

1 に答える 1

5

max_size()ベクトルが格納できる要素の絶対最大数です。デフォルトのアロケータを使用すると、これは通常std::numeric_limits<std::size_t>::max() / sizeof(T). つまり、作成できる可能性のあるその型の最大の配列です。

ただし、実際にはそれほど大きな配列を割り当てることはできません。プログラムによってロードされたモジュールは、各スレッドのスタックと同様に、プログラムのアドレス空間の一部を使用します。プログラムには、おそらく他の動的に割り当てられたオブジェクトがあります (ユーザーまたはランタイムによって割り当てられます)。これらはすべて、アドレス空間の断片化に寄与します。つまり、使用可能なアドレス空間の最大連続ブロックは、使用可能なアドレス空間の総量よりもはるかに小さくなります。

vectorつまり、 withmax_size()要素を割り当てることは実際には不可能です。

于 2012-08-27T20:25:33.953 に答える