1. ホーム
  2. c++

[解決済み] C++で配列の最大長制限はありますか?

2022-02-11 01:05:25

質問

C++で配列の最大長はありますか?

C++の制限なのか、それとも私のマシンに依存するのでしょうか?それは調整可能なのでしょうか?配列の型に依存するのでしょうか?

どうにかしてその限界を突破できないか、それとももっと良い情報保存の方法を探さなければならないか?また、最も簡単な方法は何でしょうか?

私はLinux環境で仕事をしていますが、long long intを配列に格納する必要があります。私の質問は、N >10桁のN個の長い長い整数の配列を格納する必要がある場合、私は何をしなければならないのでしょうか?

学校で暗号アルゴリズム(例えばp-Pollardなど)を書いていて、整数と配列の長さの表現の壁にぶつかったので、これが必要なのです。

どのように解決するのですか?

2つの制限があり、どちらもC++ではなく、ハードウェアによって強制されます。

最初の制限(決して到達してはならない)は,配列のインデックス(およびそのサイズ)を記述するために使用されるサイズ型の制限によって設定されます.これは、システムの std::size_t が取ることができます。このデータ型は、あらゆるオブジェクトのサイズをバイト単位で格納できるほど大きなものです。

もう1つは、物理的なメモリ制限です。配列内のオブジェクトが大きくなればなるほど、メモリが一杯になるため、この制限に早く到達することになります。たとえば vector<int> 所定の大きさの n 型の配列の数倍のメモリを消費します。 vector<char> (小さな定数値を差し引いた値)であるため int よりも大きいのが普通です。 char . したがって vector<char> よりも多くの項目を含むことができます。 vector<int> は、メモリが一杯になる前に のようなC言語の配列も同じようにカウントされます。 int[]char[] .

さらに、この上限は、以下のような種類の allocator を構築するために使用される vector というのも allocator は、メモリを自由に管理することができます。非常に奇妙な、しかし考えうるアロケータは、あるオブジェクトの同一のインスタンスがリソースを共有するように、メモリをプールすることができます。この方法では、コンテナにたくさんの同一のオブジェクトを挿入することができ、そうしなければ利用可能なメモリをすべて使い切ってしまうでしょう。

それ以外には、C++は何の制限も課していないんだ。