イメージサイズが最大許容サイズを超えてしまいます。

解決


エル  2004-10-06 01:05:20  No: 54638

題の通り、
fatal error LNK1248: イメージサイズ(CC106000)が最大許容サイズ(80000000)を超えています。

というエラーが出てしまいました。
前の(コンストラクタがうんぬんかんぬんの質問)解決後の書き込み等の
ことを見直してコンストラクタを変更したりしたんですが、
このイメージサイズだけは解決することはできません。
ちなみに、自分でもイメージサイズが大きくなってしまうような要因に
大体の見当をつけているのですが、

・先の質問であったTableクラスが7の9乗の9次元配列で実装。かつ、メン  バが7つ存在する。さらに、その要素を持つ変数が3つ存在する。

といった、ことが原因なのではないかと見当をつけています。
少なくても状態数が847,425,747個もあるので・・・
ただ、7×7×7の立体フィールド上に与えられた重みをすべて保存しておかなければならないプログラムの特性上、状態数の削減ができない状態です。なにか、解決策はあるでしょうか?


tetrapod  2004-10-06 01:21:01  No: 54639

現状の Win32 では1プロセスあたりのユーザーメモリ空間は 2GB です。
CC106000 が本当なら約 3.2GB のプログラムを作ろうとしていることになります。

原理的にデータ量を削減できないのなら Win32 で動かすのは不可能。
将来の Win64 を待つか、いわゆるスーパーコンピュータを使うしかないでしょう。


エル  2004-10-06 01:25:31  No: 54640

どういう構造なのか
補足説明を少し書いておきます。

一つのオブジェクトは自分から見た他の3つのオブジェクトの位置情報を保存するため7×7×7のうちのどの座標にいるかを保存します。
ここで、他のオブジェクトの座標を[7][7][7]の3次元配列で保存するため
すべてのパターンをあわせると、[7][7][7][7][7][7][7][7][7]の9次元の配列が必要になります。さらに、そのオブジェクトの配置関係における、オブジェクトの移動方針を決めるために、7つの方向に対する(上、下、左、右、奥、手前、移動しない)重みを保存します。
そのデータ構造を3つのオブジェクトに持たせるため、
7の9乗×7×3の状態数が必要になります。


Ban  2004-10-06 02:11:02  No: 54641

データ数が減らせないなら、とりあえずこのあたりでがんばるしか
ないのでは?

・個々のデータのサイズを削ってみる
  (short にするとか、重みは 3bit で足りるのでパッキングするとか)

・データ構造を見直して、全体のデータはファイルにでも
  保持しておき、必要な部分のみメモリ上に読み出して使う。

# MS-DOS 時代の 64KB/640KB の壁を髣髴させる労力がかかりそうですが、
# 設計時に概算してみれば予測できた挙動かと思います。


Ban  2004-10-06 05:35:48  No: 54642

> 重みは 3bit で足りるのでパッキングするとか

各方向に対して重みがあるのですね。読み違えてました。


エル  2004-10-12 08:42:59  No: 54643

教官と綿密な打ち合わせにより、やむなしということで
7×7×7の空間を縮小することで合意しました。
5×5×5でなんとか動くようになったので
それで、プログラムを組んでいきたいと思います。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加