コンピュータ将棋など…。
× [PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。 あれから解けない問題のログを見ながら、原因推測⇒ソース変更⇒検証で解けない問題が少なくなってきたんだけど、ちょっと手を入れると解けていた問題も解けなくなったりする。 せめて15手以内は時間をかければ解けるという状態にしないとなぁ~。 あと、最大深さを 1535 にして走らせたら、深さ 500 超えたあたりで Stack Overflow が発生した。orz まぁ、実戦ではそこまで読まないし、今後のマルチスレッド化でスレッド生成時にスタックサイズを十分大きく指定してやれば問題ないかな。 PR
スタック領域
再帰呼び出しを500回しているとすれば、スタック領域の自動拡張は行われていると思いますが、数MBを消費してしまうとデフォルトの総量限界を超えるかもしれません。
UNIX系OSだと、(u)limitなどで領域を拡張して手数が伸びるようなら、総量オーバーらしいとわかると思いますが、Windows系はよく知りません。ただ、ネットを検索すればそれなりに情報がありそうではあります。
Windowsでのスタックの大きさ
VC系なら、リンカのオプションにスタックサイズの指定があると思います。
とりあえず
スタックサイズ指定のオプションはあるみたいですが、とりあえず3~17手くらいの詰将棋でデバッグしているので、まだ気にしないことにしました。
実は…
デフォルトのスタックで普通は十分なはずなんですけれどね。
でも、うさぴょんは、局面をスタックにおいているので、ちょっと深く読むとスタックオーバーフローを起こすので『こんなこと』を知っていると言う話があったり。 全面的に書き直す時には、スレッド毎に盤面を一つ持つ形(YSSと同じかな?)に書き直した方がいいんだろうなぁ…(--;
マルチスレッド化を考慮して
一応、今のソフトではインスタンスをひとつ作成し Move()を呼ぶ前に必要な情報を退避して、Undo するようにしています。
といっても、盤面は退避しないけど、利き情報を退避しているので容量的にはそれほど効果がないかもwww |
カレンダー
フリーエリア
なのはの応援をしていただき、かつ協力いただける方は、アマゾンでの買い物は下のリンクからお願いします
最新CM
[04/27 とおりすがり]
[10/21 おてだま]
[10/20 おてだま]
[01/24 なのはminiふぁん]
[01/08 sakura]
最新記事
(06/12)
(04/17)
(08/13)
(06/08)
(06/06)
最新TB
プロフィール
HN:
かず
性別:
非公開
ブログ内検索
カウンター
アクセス解析
|