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


HSPTV!掲示板


未解決 解決 停止 削除要請

2014
0709
crazymori配列変数確保後の開放について3解決


crazymori

リンク

2014/7/9(Wed) 20:55:36|NO.62794

こんにちは

このたびsdimで配列変数を作成する運びとなりまして、質問させていただきました。

sdimで配列変数を作り、使用後に開放する際、
sdim a,20,2000,2000
sdim a

というふうにしているのですが、タスクマネージャ上で見ると、少ししか開放されていません。
1次元の配列変数ではうまく開放されるのですが、2次元以上だとどうやっても解放できません。
(sdim a,4,1,1 とかでもだめです。)
どのようにしたらよいでしょうか。



この記事に返信する


暇人

リンク

2014/7/10(Thu) 00:19:32|NO.62797

HSPには変数を完全に削除する命令は無いから・・・
sdimは1要素が一個の変数と同じ意味になり
sdim a,64,100は文字列型変数を100個確保してるのと同じ
sdim a,64,1としても残り99個はそのまま残る感じ(他の変数確保時に再利用はされる)
dim a,100,100は要素数に関係なく変数1個のサイズが増えるだけなので
dim a,1で使用量を減らせる

解決方法とは違うけど
使用する文字数が決まってる(20バイト未満とか)なら

dim a,5,2000,2000 //1要素4バイトなので5 //文字列代入 dupptr a_str20,varptr(a(0,1,1)),20,2 a_str20="あいうえお" dupptr a_str20,varptr(a(0,20,20)),20,2 a_str20="かきくけこ" //文字列表示 dupptr a_str20,varptr(a(0,1,1)),20,2 mes a_str20 dupptr a_str20,varptr(a(0,20,20)),20,2 mes a_str20 //使用量削減 dim a
使用目的と処理速度で使えない場合もあると思うが・・・
sdim a,20,2000,2000
より
dim a,25,2000,2000
のがメモリ使用量は少ないので、ある程度なんとかなりそう

関係ないけどsdim b,20と、やっても確保されるのは64バイト(更に変数情報の為に数十バイト使用される)



crazymori

リンク

2014/7/10(Thu) 20:39:11|NO.62807

暇人さん、回答ありがとうございます。

ポインタの操作をするんですね。
ヘルプには初心者にはおすすめしないと書いてあるので、
ちょっと敷居が高そうです。

勉強します。



crazymori

リンク

2014/7/10(Thu) 20:54:32|NO.62808

やっぱりよくわからない…

ので別の実行ファイルで処理することにしました。



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