No.7
- 回答日時:
規格上、1個のオブジェクトのバイト数として保証されるのは...
C90の場合、32767バイトまで
C99の場合、65535バイトまで
です。
バイト数ですので、配列の要素がint型であれば、(C90なら)32767/sizeof(int)バイトまでです。
No.6
- 回答日時:
(私の経験では)添え字の中は符号付のint型で解釈されるのでアクセスできるのはint型の正の最大値まで。
※添え字で参照できないだけで、ポインタ使ったり多次元配列とのUNIONにしたり工夫すれば使用は可能
他の方の回答にあるように、確保出来る配列サイズの最大は別問題
No.5
- 回答日時:
あなたの環境が全く分からないので具体的な上限は書けませんが, 規格上ホステッド環境 (端的には「OS の上で動いている状態」) では「65536 バイト以上のオブジェクトは使えなくても文句は言えない」となっています. つまり, sizeof Array ≧ 65536 となるときには動かないかもしれません.
おまけですが「そもそもWindowsの32bit版はアプリが仮想メモリ空間を2GBしか使えません。2GBを超えるには64bit版が必要です。」というのは正確じゃないですね>#2.
仮想メモリ空間そのものはちゃんと 4GB とられています. ただしカーネルが使うメモリ分として 2GB (オプションを付ければ 1GB) 持っていかれるので, 「ユーザプログラムが自由に使える領域」として 2GB (または 3GB) の制限があります... という説明も本当は正確じゃない (1プロセスでそれを超えるメモリを使う技術は存在する) んだが, 面倒なので以下省略.
とはいえ, こんなことができるかどうかを考える前に, どうしてそんなにメモリが必要なのかを検討するべきだというこれまでの回答者の意見には全面的に賛成.
No.4
- 回答日時:
>C言語で配列Array[N]の長さNの上限っていくらなんでしょうか?
言語仕様上では、上限はありません。
コンパイラは「実行時に実際にメモリが確保出来るかどうかは考えず、言われた通りに、言われた通りの領域を確保するようなプログラムコードを生成するだけ」です。
リンクして実行ファイルを作ろうとした時にサイズオーバーしてエラーになろうが、実行時にスタックやデータ領域が足りずに例外を発生して異常終了しようが、コンパイラは「お構いなし」です。
ただ黙々と「言われた通りにコード生成」して「後の事は知ったこっちゃない」のが「コンパイラ」です。
そして「後の事は知ったこっちゃない状態」で作られたプログラムは、実行したとたん「メモリが破綻して異常終了」するでしょう。
>もし可能なのであれば上限を2147483647にしたいのですが
それは「要素数が2147483647個の配列を作りたい」って事ですか?
だとしたら「その配列が確保出来る実行環境」を用意し、そこで実行すれば良いだけです。
例えば「64ビットCPUを搭載し、64ビットのアドレス空間すべてにメモリを実装してあって、64ビットのアドレス空間を自在に使用可能なOSを走らせ、そのOSで動く実行ファイルを生成するコンパイラ」を使えば、要素数が2147483647個の配列を何個でも使えます。
なぜなら、その動作環境では「メモリが18446744073709551616バイトもある」のですから「要素数が2147483647個の配列なんか、ゴミみたいなもん」です。
このように「実行環境で、メモリが無尽蔵にある」かも知れないので「コンパイラは、言語仕様上では、配列の要素数に上限を設けていない」のです。
下手に、仕様に「上限」を定めてしまうと「実行環境では充分なメモリがあるのに、言語の仕様に縛られて、大きな配列を確保出来なくなってしまう」という弊害が出ます。なので「仕様では、上限無し」になっています。
もちろん、それは「仕様の上だけ」であって「実行時、実際に、そんだけのメモリが確保出来るかは、まったく別の問題」です。
No.3
- 回答日時:
私が今ままで、プログラミングをしてきた経験では、
そのような、非常に大きい添え字を必要とする状況は発生しませんでした。
通常、そこまでの添え字を必要としないと思いますが、
どうしてそのようなことをなさりたいのでしょうか?
そのこと自体に、非常に興味があります。
よろしければ、その理由もしくは背景を教えていただけませんでしょうか?
この回答への補足
物理系のシミュレーションをしています。
試行ごとにある現象が起こるかどうかをrand()%RAND_MAXがその現象が起こる確率pに比べて大きいか小さいかで判断しています。
この方法では毎回rand()を参照しなければならずボトルネックになっていました。そこで、あらかじめArray[0]~Array[RAND_MAX-1]まで乱数を読み込んでおいて順番に使おうかなと考えました。
そのためにArray[RAND_MAX] (RAND_MAX=2147483647)の配列を準備したかったというのが背景です。
しかし、先ほど自分でもいろいろと調べていたらxorshift()という関数が非常に高速でかつ乱数としても優れているそうなのでそちらを使ってみることにしました。xorshift()に関しては分からないことがありますが、それは別の質問とします。
No.1
- 回答日時:
言語上の上限はsize_tの上限と一致するとは思いますが、そんなメモリをスタックに保有できるような環境は存在しません。
Windows上では一般的にスタックは1Mとかですから、実質的にはその半分の500kも確保できれば良いほうじゃないんでしょうか?
C言語で長大な配列を確保したい場合は、動的配列にするのが常套手段ですが、それでも2Gなんて連続領域を確保することはほぼ不可能だと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- Perl perlで2次元配列をサブルーチンに値渡しで渡す 5 2022/12/17 18:49
- その他(プログラミング・Web制作) プログラミングについて(Python) 添付した画像はC言語で簡単に作ったソースで、1つの配列に5つ 3 2022/09/10 19:15
- C言語・C++・C# 10人分の生徒の英語の点数{32,34,41,38,40,26,14,46,42,50} と数学の点 2 2022/05/26 21:31
- マウス・キーボード Google検索の英語キーボード 英語のキーボードの配列が元に戻らなくなりました まえの配列は左上に 1 2022/06/19 11:41
- C言語・C++・C# 写真のc言語の問題がa以外わかりません。 正直aも自信がなく、解説していただけないでしょうか? 答え 3 2022/04/29 18:21
- C言語・C++・C# c言語について array[i]-‘0’ これってどーゆー意味ですか? (ちなみに16進数を10進数 5 2022/12/06 18:39
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 1 2022/10/27 14:21
- C言語・C++・C# C言語の質問です。 以下の命令を実行するプログラムを作りました ①文字列aとbの長さを表示 ②aとb 1 2022/04/29 15:35
- C言語・C++・C# 必ずyou bet と表示されます 2 2023/07/28 22:19
このQ&Aを見た人はこんなQ&Aも見ています
-
好きな人を振り向かせるためにしたこと
大好きな人と会話のきっかけを少しでも作りたい、意識してもらいたい…! 振り向かせるためにどんなことをしたことがありますか?
-
スマホに会話を聞かれているな!?と思ったことありますか?
スマートフォンで検索はしてないのに、友達と話していた製品の広告が直後に出てきたりすることってありませんか? こんな感じでスマホに会話を聞かれているかも!?と思ったエピソードってありますか?
-
【お題】逆襲の桃太郎
【大喜利】桃太郎が1回鬼退治に失敗したところから始まる新作昔話「リベンジオブ桃太郎」にはこんなシーンがある
-
【選手権お題その3】この画像で一言【大喜利】
とあるワンシーンを切り取った画像。この画像で一言、お願いします!
-
【選手権お題その2】この漫画の2コマ目を考えてください
サッカーのワンシーンを切り取った1コマ目。果たして2コマ目にはどんな展開になるのか教えてください。
-
C言語の2次元配列 容量が大きすぎる場合の対処方法
C言語・C++・C#
-
配列の添え字の最大数とは?
C言語・C++・C#
-
関数から配列を返すには?
C言語・C++・C#
-
-
4
C言語で、メモリを解放しないで終わるプログラム
C言語・C++・C#
-
5
char型配列の最大要素数
C言語・C++・C#
-
6
unsigned long long 型のフォーマット指定子
C言語・C++・C#
-
7
C言語のポインターに関する警告
C言語・C++・C#
-
8
バッファとは何ですか
C言語・C++・C#
-
9
C言語 exitの使い方
C言語・C++・C#
-
10
fopne で失敗する原因
C言語・C++・C#
-
11
<unistd.h>をVisualStudioでつかえるようにする
C言語・C++・C#
-
12
配列の要素数に変数を入れたいときには
C言語・C++・C#
-
13
C言語で巨大配列を作るにはどうすれば良いのでしょうか?
C言語・C++・C#
-
14
fopenで別ディレクトリにファイルをオープンしたい
C言語・C++・C#
-
15
C言語初心者の質問失礼します。
C言語・C++・C#
-
16
python エラー
その他(プログラミング・Web制作)
-
17
mallocの確保要素数の限界は?
C言語・C++・C#
-
18
C言語 エラーの原因がわからないので,見てほしいです
C言語・C++・C#
-
19
【C言語】配列の中に配列を入れたい
その他(プログラミング・Web制作)
-
20
C言語での引数の省略方法
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・【選手権お題その3】この画像で一言【大喜利】
- ・【お題】逆襲の桃太郎
- ・自分独自の健康法はある?
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・ちょっと先の未来クイズ第6問
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語 配列の長さの上限
-
配列を使わずに、変数名を動的...
-
テキストファイルから文字列を...
-
C言語で特定列だけを抽出して配...
-
配列で格納したものをmsgboxで...
-
VBAで配列からbmp画像を出力す...
-
C# Listを使わずに2次元配列の...
-
C# 配列の変数宣言について。
-
配列の参照渡しで型が一致しま...
-
複数の選択範囲の行番号を個別...
-
メモリの初期値
-
先頭アドレスとは何ですか?
-
2次元配列を戻り値とする関数?
-
【速いブラインドタッチ】手を...
-
sinのマクローリン展開
-
配列を含む構造体の初期値について
-
ゼロサプレスって?
-
unsigned char配列への入力の仕方
-
アルファベットの配列を数字の...
-
CSVファイルのデータを2次元配...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語 配列の長さの上限
-
配列を使わずに、変数名を動的...
-
C# Listを使わずに2次元配列の...
-
配列で格納したものをmsgboxで...
-
先頭アドレスとは何ですか?
-
C言語で特定列だけを抽出して配...
-
複数の選択範囲の行番号を個別...
-
配列の参照渡しで型が一致しま...
-
テキストファイルから文字列を...
-
【速いブラインドタッチ】手を...
-
C# 配列の変数宣言について。
-
unsigned char配列への入力の仕方
-
【C言語】配列の中に配列を入れ...
-
VBで構造体の配列を関数に渡す...
-
配列を含む構造体の初期値について
-
C++ vectorに配列をプッシュしたい
-
ExcelVBAで質問です。離れた二...
-
配列をEraseしてもメモリが開放...
-
Functionの戻り値を2次元配列...
-
VB.NET 構造体の配列の検索機能...
おすすめ情報