[解決済み] C++で配列の最大長制限はありますか?
質問
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++は何の制限も課していないんだ。
関連
-
[解決済み】C++ クラスヘッダが含まれているときに「不明な型」があるのはなぜですか?重複
-
[解決済み] クラスにデフォルトコンストラクタが存在しない。
-
[解決済み】浮動小数点数の乱数生成
-
[解決済み] 配列のベクトルを扱う正しい方法
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] JavaScript で配列に値が含まれているかどうかを確認するにはどうすればよいですか?
-
[解決済み] 配列からArrayListを作成する
-
[解決済み] 配列に特定のインデックスで項目を挿入する方法 (JavaScript)
-
[解決済み】オブジェクトの配列を文字列のプロパティ値でソートする
-
[解決済み】配列に何かを追加する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】getline()が何らかの入力の後に使用されると動作しない 【重複あり
-
[解決済み】LLVMで暗黙のうちに削除されたコピーコンストラクタの呼び出し
-
[解決済み】クラステンプレートの引数リストがない
-
[解決済み】C++コンパイルタイムエラー:数値定数の前に期待される識別子
-
[解決済み】C++エラーです。"配列は中括弧で囲まれたイニシャライザーで初期化する必要がある"
-
[解決済み】'cout'は型名ではない
-
[解決済み] 非常に基本的なC++プログラムの問題 - バイナリ式への無効なオペランド
-
[解決済み】1つ以上の多重定義されたシンボルが見つかる
-
[解決済み】警告 - 符号付き整数式と符号なし整数式の比較
-
[解決済み】C++でnewを使って2次元配列を宣言するには?