HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2025
0210
みきゃん1万棋譜を読み込みたい。エラー26を回避したいです。2解決


みきゃん

リンク

2025/2/10(Mon) 04:50:40|NO.103033

棋譜検索するプログラムを作っているのですが、
私の環境で、大体、4190棋譜(sgf)ぐらいを読み込むと(約87万ノード弱をモジュール変数に展開すると
エラー26が発生します。1万棋譜ぐらいは展開できるようにしたいのですがどうしたらいいでしょうか?

大体タスクマネージャー上で1280M使用した当たりでのエラーになります。

STRUCT ID0-57 PTR$005DF9A8 SIZE432(1) モジュール変数の一つの大きさはこうなっています。
STRUCT ID0-8 PTR$006DEDF8 SIZE384(1) 違うsgfモジュールを用意して、試したら、寧ろ3400棋譜ほどでエラーが出たりする(1170M)ので、メモリ上限の問題ではない気もしています。

現状では4100棋譜を読み込み上限にして、回避していますが、読み込める棋譜は多いに越したことはないので。。。

モジュール変数を使わない方がもっと読み込めたりしますか?よろしくお願いします。



この記事に返信する


TOMATO

リンク

2025/2/10(Mon) 07:32:52|NO.103034

通常のHSPランタイム(32bit版)を使っているであれば、やはりメモリ不足ではないかと思います。
32bit版の場合は搭載メモリにかかわらず、プロセスは最大2GBまでしか使用できません。
(LARGEADDRESSAWAREを適用すると4GBまで拡張できますが、EXEに小細工する必要があります)

アプリ側(HSP)はある程度の単位で連続したメモリ領域を確保するようにOSへ要求しますが、
プロセスが使用できるメモリが断片化している場合は、
たとえ1GB空いていたとしても失敗するケースがあります。
(※ ある程度の単位 というのは内部実装で結構変わってくるので、何とも言えないです)

【プロセスメモリのイメージ】
■=使用中
□=空き

---------------
■□■□□□□□□□

以上の状態から、2個分(■■)のメモリを確保する場合は
空いている隙間がたくさんあるので、
問題なく確保できます。

■□■■■□□□□□

ところが、断片化が進んでいる状態では

■□■□■□■□■□

以上のような状態になっていることがあります。
その場合、同じように2個分(■■)のメモリを確保しようとしても
入れられるところがないので、メモリ不足となってしまいます。
---------------

64bit版HSPに切り替えるというのも1つの手だと思います。



みきゃん

リンク

2025/2/10(Mon) 09:08:19|NO.103035

トマトさん返信ありがとうございます。

プロセスメモリの断片化している時のイメージがつかめました!!

64bit版の移行を検討します!(仕様を調べてみます)

ありがとうございました。



記事削除

記事NO.パスワード
(質問が解決したスレッドは他の利用者に活用してもらうため、削除しないようお願いします)

NO.103033への返信

マスコット

好きなマスコットを選んでください。

名前

e-mail
HOME
  1. 初めて利用する方は、HSP3掲示板の使い方をお読みください。
  2. 不要部分の多い長いスクリプトの投稿は ご遠慮ください。
  3. 書き込みは自動改行されません。適度に改行を入れてください。
  4. スクリプトは小文字の<pre>〜</pre>で囲むと見やすく表示できます。

削除用パスワード

解決したら質問者本人がここをチェックしてください。

エラー発生時、再送信すると二重送信になることがあります。
回答が得られたら、お礼書き込み時に[解決]チェックしてください。
SPAM防止のためURLから始まる文章は投稿できません。
SPAM防止のため英文字のみの本文を投稿することはできません。

ONION software Copyright 1997-2023(c) All rights reserved.