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


HSPTV!掲示板


未解決 解決 停止 削除要請

2018
0315
mHSP3.5のsplit命令でメモリ使用量が増加し続ける4解決


m

リンク

2018/3/15(Thu) 20:23:07|NO.82755

配列を確保していない、もしくは不十分な配列をsplitの代入先変数に指定すると
メモリ使用量が実行するごとに増えていきます。
HSP3.4では問題ありませんでした。

以下検証用のソースです。


#uselib "kernel32.dll" #cfunc GetCurrentProcess "GetCurrentProcess" #uselib "psapi.dll" #func GetProcessMemoryInfo "GetProcessMemoryInfo" int,int,int // "0,1,2,3....." のカンマ区切り文字列を生成 a = "0" : repeat 64,1 : a+= ","+cnt : loop dim pmc, 10 hProcess = GetCurrentProcess() GetProcessMemoryInfo hProcess, varptr(pmc), 40 v = pmc(3), pmc(3) // WorkingSetSize mes "実行数 : メモリ使用量, (初期との差), [直前からの増加値]" mes "0回:\t"+pmc(3) repeat 10, 1 gosub *SUB mes ""+cnt+":\t"+pmc(3)+", (+"+(pmc(3)-v)+")"+", [+"+(pmc(3)-v(1))+"]" v(1) = pmc(3) loop repeat 990, 11 gosub *SUB if ((cnt \ 100) == 0) { mes ""+cnt+":\t"+pmc(3)+", (+"+(pmc(3)-v)+")"+", [+"+(pmc(3)-v(1))+"]" } v(1) = pmc(3) await loop stop *SUB sdim b ;sdim b, 64, 64 // 予め配列を区切り数以上確保しておくと増えない split a,",",b GetProcessMemoryInfo hProcess, varptr(pmc), 40 return



この記事に返信する


Drip

リンク

2018/3/15(Thu) 21:07:52|NO.82756

こんにちは。
これ本当に危険ですね。
splitを多用するコードでは甚大なメモリリークになる気がします。
この命令はDishのマニュアルに「正しく動作していません」とちょろっと書かれていて
いわく付きのまま放置されているようで今後どういう予定なのか先も見えず使うことができません。
はやく修正されることを祈るばかりです。



さか

リンク

2018/3/17(Sat) 05:43:21|NO.82762

実行してみました。

splitと言うより、sdim bの自動拡張でメモリが解放されないみたいですね。

split a,",",bを以下に変えても同じになりました。
repeat 64 : b(cnt)="" : loop

確かに3.4では起きないですね。
自分的には配列変数の自動拡張ってされなくてエラーになる場合もある認識
で信用していないです。
他にも重要な変数はちゃんと宣言した方が型違いの誤動作を防げるかなと思
っています。
とは言え不具合は解消してほしいですね。



Velgail

リンク

2018/3/17(Sat) 18:38:41|NO.82765

暫定対策用のsplitを実装してみました。


#undef split #module #deffunc split var in,str delim,array out len=1:ps=0:dl=strlen(delim) repeat pt=instr(in,ps,delim) if(pt<0):break len++ ps+=pt+dl wait 0 loop ps=0 sdim out,1,len repeat len pt=instr(in,ps,delim) if(pt<0){ out(cnt)=strmid(in,ps,strlen(in)) }else{ out(cnt)=strmid(in,ps,pt) } ps+=pt+dl wait 0 loop return len #global
木主検証ソースを利用すると、
システム標準では0回:17698816から1000:26767360になるところを、
0回:17772544から1000:17928192 に押さえ込みました。直前増分は+0だらけ。
多分リークしてない?



おにたま(管理人)

リンク

2018/3/17(Sat) 23:48:09|NO.82766

ご報告ありがとうございます。
メモリのリークが起こっている可能性があるので、調査して修正したいと思います。



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