[解決済み] C言語における配列の最大サイズは?
質問内容
プログラム実行時に確保されるメモリ量は、ハードウェアによって制限されることは理解しています。しかし、私の疑問は ハードウェアに関係なく 仮にメモリ量に制限がないとして、配列に制限はないのでしょうか?
解決方法は?
はありません。 固定 C言語では、配列のサイズに制限があります。
配列オブジェクトも含め、単一のオブジェクトのサイズは
SIZE_MAX
型の最大値は
size_t
の結果である。
sizeof
演算子を使用します。 (よりも大きなオブジェクトをC標準が許可しているかどうかは完全には不明です)。
SIZE_MAX
バイトですが、実際にはそのようなオブジェクトはサポートされていません; 脚注を参照)。 このため
SIZE_MAX
は実装によって決定され、いかなるプログラムによっても変更することはできないので、この場合
SIZE_MAX
バイトのオブジェクトを作成します。(これは上限であって、最小上限ではありません。実装によっては、より小さな制限を課すこともできますし、通常そうします)。
タイプの幅
void*
汎用のポインタ型であるため、実行中のプログラムにおける全オブジェクトの合計サイズに上限があります(単一オブジェクトの最大サイズよりも大きくなる可能性があります)。
C言語規格では、これらの固定サイズに下限を設けているが、上限は設けていない。 適合するC実装は無限サイズのオブジェクトをサポートすることはできませんが、原理的には任意の有限サイズのオブジェクトをサポートすることができます。 上限は、個々のC言語実装や動作環境、物理学によって課されるものであり、言語によって課されるものではありません。
例えば、準拠した実装では
SIZE_MAX
は 2 に等しい
1024
-1、つまり
原則的に
までのオブジェクトがあります。179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137215 バイトになります。
このようなオブジェクトを実際にサポートするハードウェアが見つかると良いですね。
フットノート
: よりも大きいオブジェクトは存在できないという明確なルールはない。
SIZE_MAX
バイトになります。 を有用に適用することはできなかったのですね。
sizeof
演算子は、他の演算子と同様に、このようなオブジェクトに適用されます。
sizeof
はオーバーフローする可能性があります。だからといって、そのようなオブジェクトに対して操作を実行できないわけではありません。 しかし実際には、まともな実装であれば
size_t
サポートするオブジェクトの大きさを表すのに十分な大きさです。
関連
-
[解決済み】Linuxでexeclp()がどのように動作するのか理解できません。
-
[解決済み】コンパイラの警告 - 真理値として使用される代入の周囲に括弧を付けることを推奨する
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] JavaScript で配列に値が含まれているかどうかを確認するにはどうすればよいですか?
-
[解決済み] 配列からArrayListを作成する
-
[解決済み] 配列に特定のインデックスで項目を挿入する方法 (JavaScript)
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み】C/C++の"-->"演算子とは何ですか?
-
[解決済み】オブジェクトの配列を文字列のプロパティ値でソートする
-
[解決済み】高放射能環境下で使用するアプリケーションのコンパイルについて
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Connect: ソケット以外でのソケット操作
-
[解決済み] clang: error: linker command failed with exit code 1が表示されるのはなぜですか?
-
[解決済み】 switch case: error: case label does not reduce to an integer constant
-
[解決済み】式は変更可能なL値でなければならない
-
[解決済み】サイズ8の無効な読み取り - Valgrind + C
-
[解決済み】fgetsによるセグメンテーションフォールト(コアダンプ) - と思う。
-
[解決済み】インクリメントオペランドとして lvalue が必要です。
-
[解決済み】宣言指定子で2つ以上のデータ型がある場合のエラー【非公開
-
[解決済み】Linuxソケットのwrite()でBad File Descriptorが発生するC
-
[解決済み】C言語におけるsize_tとは?