最新閲覧日:

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

なぜそんな警告がでるのでしょうか?どなたか教えてください、お願いします。
※OSはWINDOWS2000を使用しています。

A 回答 (3件)

補足読みました。



よく見たら、268,435,456バイトって256MBですね。
で、MSDNを調べてみたところ、単純にリンカの出力する
警告のようですね。
#LNK4013、LNK4084にあります。

これによると、/BASEオプションで設定されている、
もしくはディフォルト値を越えているために、リンク時に
警告をはき出すようです。どうやらこれらを見てみると、
アプリケーションの最大サイズは256MBとされている
ようです。

DLLやOCXなどにしてここのアプリケーションサイズを
小さくするか、メモリを動的に取得するようにして、
サイズを減らさないと、その警告は消えないと思います。
#ちなみに実行結果が正常なのも保証はされないと
#思いますよ。

って、toysmith様も同じことを書かれていますね。
ではでは☆
    • good
    • 0
この回答へのお礼

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

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

お礼日時:2001/05/19 21:47

Windowsシステムではアプリケーションサイズ(CODE+DATA)が2^28バイトを超えるとこの警告を出すようです。


多分、グローバルで大きな配列を確保しているのでしょう。

数値解析だと大きな配列は必須ですから他の方法を考える必要があるでしょう。
(アルゴリズムを見直せば何分の1かになるかもしれませんが)

VirtualAllocを使えば4GBまでの領域を確保可能です。
ただし、仮想空間で確保する為ディスク開き容量、スワップ頻度などを考慮しなければなりません。
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/05/19 21:44

単純に、.objファイルが大きすぎるのではない


でしょうか?

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

ではでは☆

この回答への補足

ご回答ありがとうございます。

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

ところで、このWSは最初、メモリが256MBでメモリを増設する前にVC++をインストールしました。そのためVC++が、メモリが増設されたのを認識していないということはあるのでしょうか?

補足日時:2001/05/18 21:40
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード


人気Q&Aランキング

おすすめ情報