• ベストアンサー

VC++におけるメモリ使用量について

現在VC++6.0を使用して数値解析を行っているのですが、ワークステーションでメモリを1256MBに増設して、500MBくらいのメモリを使用する解析を行ったところ、「トータルイメージサイズが最大値(268435456)を越えています; イメージは動作しない可能性があります」という警告が出ました。しかし実行してみると正常に動作します。 なぜそんな警告がでるのでしょうか?どなたか教えてください、お願いします。 ※OSはWINDOWS2000を使用しています。

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

  • ベストアンサー
noname#9414
noname#9414
回答No.3

補足読みました。 よく見たら、268,435,456バイトって256MBですね。 で、MSDNを調べてみたところ、単純にリンカの出力する 警告のようですね。 #LNK4013、LNK4084にあります。 これによると、/BASEオプションで設定されている、 もしくはディフォルト値を越えているために、リンク時に 警告をはき出すようです。どうやらこれらを見てみると、 アプリケーションの最大サイズは256MBとされている ようです。 DLLやOCXなどにしてここのアプリケーションサイズを 小さくするか、メモリを動的に取得するようにして、 サイズを減らさないと、その警告は消えないと思います。 #ちなみに実行結果が正常なのも保証はされないと #思いますよ。 って、toysmith様も同じことを書かれていますね。 ではでは☆

asamaken
質問者

お礼

ご回答ありがとうございます。 メモリを動的に取得できるようにしてみたいと思います。 大変参考になりました。ありがとうございます。

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • toysmith
  • ベストアンサー率37% (570/1525)
回答No.2

Windowsシステムではアプリケーションサイズ(CODE+DATA)が2^28バイトを超えるとこの警告を出すようです。 多分、グローバルで大きな配列を確保しているのでしょう。 数値解析だと大きな配列は必須ですから他の方法を考える必要があるでしょう。 (アルゴリズムを見直せば何分の1かになるかもしれませんが) VirtualAllocを使えば4GBまでの領域を確保可能です。 ただし、仮想空間で確保する為ディスク開き容量、スワップ頻度などを考慮しなければなりません。

asamaken
質問者

お礼

ご回答ありがとうございます。 大変参考になりました。

すると、全ての回答が全文表示されます。
noname#9414
noname#9414
回答No.1

単純に、.objファイルが大きすぎるのではない でしょうか? それにしても数値解析だけで500MBというのは すごいですね・・・ #もう少しメモリの使い方を考慮した方が計算が #早くなるのではないでしょうか? #OSのスワップも入るだろうし・・・ ではでは☆

asamaken
質問者

補足

ご回答ありがとうございます。 早速調べてみたところ、.objファイルはどれも数KB程度で小さいです。 私の扱っている解析手法はもともとスーパーコンピューターで行われていた手法で、超並列化は行えてもメモリを削減することは解析手法の性質上不可能です。 500MBというのもWSの性能を見るために行ったテストで、実際は現在の1.2GBでも全然足りないというのが現状で、まだまだメモリを増設する必要があります。 ところで、このWSは最初、メモリが256MBでメモリを増設する前にVC++をインストールしました。そのためVC++が、メモリが増設されたのを認識していないということはあるのでしょうか?

すると、全ての回答が全文表示されます。

関連するQ&A