- ベストアンサー
配列データ容量とメモリについて
プログラム中に、4バイトのデータを(2^24)×3個の配列に確保し計算するところがあるのですが、 この場合の配列のみのデータを メモリに確保するためのメモリの必要容量は 4×(2^24)×3=201326592バイト=201.32・・メガバイトになりますよね。 メモリはOSなどアプリケーションを立ち上げる時にも使いますが、それらの分を差し引いても、202MBぐらい空いてるとすれば上記のことをできるのでしょうか? プログラムを実行すると 例外 unknown software exception (0xc0000fd)がアプリケーションの0x00401707で発生しましたと なって終了してしまいます・・ それとももともと確保できる容量はソフト的に決まってるのでしょうか。 ちなみに使用環境のPCのメモリは512MBのを一個刺してあります。コンパイラはVCです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
stackのオーバーフローによるエラーなのかもしれません。 通常スタックにはそれほど大きなメモリは確保されません。オプションでスタックサイズを変更することは可能だと思いますが、 それより確保する位置を変えて関数の外にするか static宣言して確保するか あるいはmallocでヒープから確保する ようにした方がいいでしょう。
その他の回答 (1)
- osumitan
- ベストアンサー率33% (102/307)
Stack Overflow で出たりするエラーのようですね。 OSにもよるでしょうが、PCで動くOSであれば メモリは使用量が物理メモリの搭載量を超えても HDDにスワップするので問題ないとは思いますが、 それでもStack Overflowは出るかもしれません。 どのようにそのメモリを確保しているかも問題ですが、 それ以前に、そんなにメモリを食う処理自体が問題ですね。 本当に同時にそれだけのメモリを確保する必要があるのか (データをファイルに外出しできないか?など) というところを検討した方がいいと思います。
お礼
みなさんのおっしゃる通りデバックモードで起動すると、stack overflowとなりました mallocの存在は知っていますが、使ったことないのでstatic宣言でうまくいきました。 ありがとうございます。