取り扱える最大配列数を大きくする方法を教えてください

このQ&Aのポイント
  • 配列数を増やすための方法はいくつかあります。
  • まず、使用するメモリーの制限について確認することが重要です。
  • また、プログラムを最適化し、効率的にメモリーを使用することも大切です。
回答を見る
  • ベストアンサー

取り扱える最大配列数を大きくする方法を教えてください

取り扱える最大配列数を大きくする方法を教えてください 熱伝導方程式を数値計算で解いてしています。 (他にも偏微分方程式をいくつか同時に解く必要があります) 温度場(2次元)として配列 double T[m][m],dT[m][m]を用意してプログラムを作成して解いています。 m=400まではプログラムが正常に動くのですが、m=500になると、いきなり終了します。 使用OSはWindows7-64bit、コンパイラはvisual c++ 2008 express editionです。 CPUはIntel-i7 860(2.8G)、RAMは8GBです。 同様のプログラムをスパコンで実行すると、m値によってプログラムが終了する問題は起きません。 また、プログラムを若干変更し、使用する配列数を減らすと使用できる最大mの数が増えるので、 何かWiondowsかコンパイラーか、1つのプログラムが使用できるメモリーの制限等に引っかかっていると思うのですが、どう対策を施して良いのかわかりません。 解決方法をご存知の方どうぞよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

スタックにとったらだめだけどヒープにとれば OK とか.

その他の回答 (3)

  • php504
  • ベストアンサー率42% (926/2160)
回答No.4

static double T[m][m],dT[m][m]; にすればスタック領域を使わないので大丈夫 と思います

knock123
質問者

お礼

まとめての御礼になりますが、皆様のご指摘通り、 スタック領域を使わないようにしたらクリアできました。 皆様同様のアドバイスを下さったので、 最初にお返事頂いた方に、ベストアンサーを差し上げたいと思います。 どうもありがとうございました。

  • YUI_AI
  • ベストアンサー率45% (303/661)
回答No.3

配列をローカルに取っているのでしょうか? であれば、以下のQAのURLを参考にしてみて下さい。 http://social.msdn.microsoft.com/forums/ja-JP/vcexpressja/thread/09a1cc86-9b64-4403-a37d-32bf0fb5bf15/

  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.2

静的に配列宣言するとスタックから確保しますが、 通常、スタックで使えるメモリはかなり少なめに制限されています。 8GBのメモリを有効に使いたい場合は、メモリを動的に確保するようにしてください。 確保は double (*T)[m] = new double[m][m]; でできます。 使い終わったら、 delete [] T; でメモリを開放しましょう。

関連するQ&A

  • 配列の添え字の最大数とは?

    調べた範囲で分からなかったので質問します。C言語で double a[N][N]={0}; のように、2次元配列を使って数値計算をしているのですが、Nの値を変更していったとき、Nが250を越えたあたりからプログラムが動かなくなってしまいました。正確には実行しても何もされずにプロンプトが帰ってきてしまいます。 N=255までは実行できました。 そこで質問なんですが、C言語の配列の添え字には限界が定められているのでしょうか?限界が規定されている場合、それはいくつまでで、それを越えて添え字を設定することは可能でしょうか? データを取る関係上、添え字を少なくとも1万程度にしたいと思っています。 ご回答お願いします。 実行環境 windows XP HE SP2 : intel core duo 1.60GHz : メモリ1GB コンパイラ Borland C++ 5.5.1

  • 配列の中から最大値だけ取り出す方法

    VB 2005,Framework2.0を使用しています。 複数のある配列の中から最大値の値だけを抽出するプログラムを作ろうと思っています。 For等のループを使うのは分かりますが、そこからどの様にコードを書けばいいのか分からなく困っています。 例えば配列にランダムに数値が入っていたとします。 Dim Hako(5) As Integer Hako(0) = 10 Hako(1) = 16 Hako(2) = 31 Hako(3) = 12 Hako(4) = 42 Hako(5) = 5 とあったらこの配列の中の最大値(42)のみを抽出したいです。 宜しくお願いします。

  • C♯の配列について

    C♯でプログラムを作っているのですが、配列の要素数の最大値と最小値の求め方がわかりません。配列の値の最大値の求め方は調べれば出てくるのですが、要素数の最大値等は調べてもわかりませんでした。 例えば下記のような配列があった場合 int[,,] a =new int[100,100,100] a[2,3,6]=1 a[4,5,9]=1 a[13,46,79]=1 a[8,15,45]=1 a[1,33,68]=1 それぞれの要素数の最小値1、3、6、最大値13、46、79は どのようにプログラムで求めればいいのでしょうか? よろしくお願いします。

  • perl 配列の要素数について

    配列の要素数について質問させていただきます。 プログラムの中で、以下のようにファイルの内容を1行ずつ読み込み、配列に入れています。  open (IN, "ファイル名");  @data = <IN>;  close (IN); こういった形で配列に入れていった場合、入れられる最大行数(=最大要素数)はどれくらいになるのでしょうか。 現在100万行のテキストファイルは、問題なく読み込めているようでした。 ご存知の方がおられましたら、ご回答いただければと思います。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • 二重配列について

    はじめてプログラムを書くのですが教えていただきたいです。     時間,   値1, 値2, 値3     00:00, 3453, 7652, 2763 00:00, 3434, 9080, 7659 02:00, 3423, 7624, 7543 02:00, 4556, 4653, 3485 ・           ・ ・ 上記のような入力ファイルを二次元配列に入れたいんですが 行数が決まっていないためどのように配列を作ったらよいか わかりません。 また、配列にいれた後に時間ごとの平均値、最大値を求める方法なども ご教授していただきたいです。

  • 多次元の配列を[ ]で括って見やすくトレースするには?

    多次元の配列を[ ]で括って見やすくトレースするには? 何次元か特定される配列ならばforなどで次元の数だけ繰り返せばできるとは思うのですが そうでないときにも [ [ [a,b,c,...],[],[],...],[],[],... ] のように隣り合う要素(配列)との切れ目が見やすいようにトレースする方法はありますか? プログラムには影響しませんが、トレースすると1次元の配列と同じように , だけで区切られてトレースされてしまい見にくいですので 配列が何次元か返させる関数など書ければ良いと思うのですが FlashPlayer10、ActionScript3.0です 質問の意味理解していただけるでしょうか お願いします

    • ベストアンサー
    • Flash
  • クッキーに保存した配列を読みこむ

    クッキーに配列を保存して、それを読み出すという プログラムを書いています。 1次元の配列だと($str[0]など)読み書き共にうまくいくのですが、 2次元、3次元になると($str[0][1],$str[0][1][2]など) 書きこむことは出来るのですが、読み込みがうまくいきません。 多次元の配列になると、クッキーの読み込みが 不安定になるのでしょうか。 どなたかご存知でしたら教えてください。お願いします。 php-3.0.18を使用しています。

    • ベストアンサー
    • PHP
  • 要素にnullが入った多次元配列の次元数(2回目)

    同様の質問について再度投稿します。 以下、問題集で見掛けたプログラムの抜粋です。 String[][] Array = { {"Sunday", "Monday"}, null, {"Monday", "Tuesday"} }; int count =0; for (String[] A : array){ count += A.length; } System.out.println(count); このプログラムを実行すると、 要素nullのlengthが数えられないため、 NullPointerExceptionが発生する、ということです。 以前に質問した際には、 上記配列に含まれるnullは、大カッコで囲まれていないため、 次元としてカウントされないので、配列の次元数は 2次元となる、という回答を頂きました。 (配列変数も二次元で宣言されている。) 細かいようですが、大カッコで囲まれていないnullは 次元数としてカウントされなくても、要素として 拡張for文の対象にはなるのでしょうか…? 解説をお願いします。

  • 最大公約数を求めたい!

    二つの数字の最大公約数を求めたいのですがどうしたらいいのかわからず困っています…。プログラムに関しては初心者なのでどなたか分かりやすく教えてもらえませんか?? <さらにもし出来る方がおられたら…>------------------------------------ 実は最終的にはある数(a(素数))があって、そのaと”たがいに素”である数(b)をプログラムで求めたいんです…。 ある本によると適当な二つの素数p、qがあるとしてこのふたつの積(つまりp*q)をmとします。また、(p-1)(q-1)=aとすると ”gcd(b,a)≡1(mod m)” という式を満たすんだそうです…。 ※この中にでてくる値で実際に分からないのは"b"のみです。 ※ここで書いているgcd(b,a)というのはaとbの最大公約数のことです。 --------------------------------------------------------------------- かなり難しいのでこの質問の回答をいただくと本当に助かります。 よろしくお願いしますm(_ _)m

  • テキストファイルを二次元配列に

    お世話になります。 テキストファイルを1行ずつ読み込んで二次元配列に格納するプログラムですが、 //最大行数 #define LINE_MAX 10 //行内最大文字数 #define INPUT_MAX 128 char str[LINE_MAX][INPUT_MAX]; というようにして実現しています。 これを行数が分からないテキストファイルでも大丈夫なようメモリを動的に確保したいと考えています。 二つの次元の内、一つを動的に確保するにはどのようにしたら良いでしょうか。

専門家に質問してみよう