- ベストアンサー
限界などはあるのでしょうか?
趣味でCプログラミングの練習をしています。 windowプログラムではなく黒いバックの画面の中で動作して文字表示のみをする方です。 ランダムグラフを作るプログラムを作り、動作確認もできていたのですが要素数を大きくすると動作しないのです。 100や200のグラフでしたら通常通り生成してくるのですが、 要素数(ノード数)を1000まで引き上げるとエラーメッセージさえ出ない状況です。 バグであればコンパイル時や動作時に何らかのアクションがあると思うのですが…… 要素1000で行うと、通常「正常動作後に出るアドレス」のみが表示されて動作した様子さえ見られないのです。 なので、もしかしたら一定以上の容量(というか領域?データ量?)を扱う限界みたいなものがあるのだろうか?と考えてしまい、質問させてもらいました。 ソフトはBCCDeveloperを使っています
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
・配列の宣言をやめてmallocなどで動的にメモリを確保する ・コンパイルオプションでヒープ領域サイズを大きくする ・コンパイルオプションでメモリモデルを変え、ヒープ領域サイズを最大に出来るメモリモデルにする
その他の回答 (3)
- titokani
- ベストアンサー率19% (341/1726)
>なので、もしかしたら一定以上の容量(というか領域?データ量?)を扱う限界みたいなものがあるのだろうか?と考えてしまい、質問させてもらいました。 Win32の場合、ユーザー領域は2GBなので限界はありますね。 データの他にもプログラム領域等ありますので、だいたい1.3GBくらいが限界のようです。 ノード数が1000の時、何バイト必要な計算なのでしょうか?
お礼
あぁ、やはり限界があったのですか…… いやはや、必要なバイト数まで計算してプログラムを組んでいませんでした。 これから勉強しなおしてきます^^
- asuncion
- ベストアンサー率33% (2127/6289)
必要なときに、必要な分の領域をmalloc()等で動的に確保して、 いらなくなったらfree()で開放するようにすると、 配列を使うよりは何かいいことがあるかもしれません。
お礼
ご回答ありがとうございます。 そうですね……malloc()は知っていれどもまだ使ってみたことはありあませんでした。 勉強してみます。
- Tacosan
- ベストアンサー率23% (3656/15482)
自動変数で配列をとっていると, 場合によってはスタックからあふれるかもしれない. ま, ソースがない以上はこれくらいしか言えないわけだけど.
補足
ご回答ありがとうございます。 スタックから溢れる……ですか。 確かにxノードのグラフを作るうえでxの2乗個の要素を持った2次元配列を3つに加え、フラグやら何やらx個の配列を山ほど使うプログラムになっておりました。 こういう場合、どうすればこれ以上の要素数で似たような動作を行うことができるでしょうか。 宜しければアドバイスいただけると嬉しいです。
お礼
具体的な返信、大変感謝致します。 今回の一件でまだまだ勉強が足りないということを痛感しています。 ありがとうございました。