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


HSPTV!掲示板


未解決 解決 停止 削除要請

2021
0619
teteteHSPブラックボックスの質問5解決


tetete

リンク

2021/6/19(Sat) 20:16:11|NO.93075

たとえば、

switch なんたら case 1: goto *next swbreak *next

とか、

if なんたら {  goto *next } *next

という書き方をすると、スタックオーバーフローになるときみたいになにかメモリ容量を食ったゴミデータがたまるということは起こりますか?
上記の場合はスタックを内部で使っていないと思いますが、
サブルーチン中で

*subroutin goto *next return *next

みたいな書き方をすると、スタックにgosubを使ったとき保存した戻りアドレスがたまりますよね?
if{}はコール、リターンなどとは違うと思うのですが、
HSPの内部処理で、何か保存しておるかなーと気になります。

また、bsaveやbloadを連続2回以上使った場合、
1回使うたびにハードディスクに1回読み書きが行われますか?
セーブデータを細かく分けてbsaveを連続して保存すると、
ファイルが保存してあるメディアがSSDやUSBメモリだった場合、寿命が急速に縮むのかどうか気になります。



この記事に返信する


tetete

リンク

2021/6/19(Sat) 20:20:44|NO.93076

「HSPの内部処理で、何か保存しておるかなー」の何かとは、
例えば{}の入れ子状態を管理するためのデータなどです。



リンク

2021/6/20(Sun) 12:12:12|NO.93088

数百回のbsave程度でメディアの寿命が縮んだりはしません。そうだとすれば、メディアのほうがちゃっちーということです。



とあるプログラマ

リンク

2021/6/21(Mon) 15:22:40|NO.93092

自分の記憶では、スタックやネストがオーバーフローを起こすのはgosubとrepeat/foreach〜loopくらいだったと思います。

要はシステム変数であるlooplevやsublevの値が高くなるものだけですね。


bsaveで数百回書き込んだ程度ではメディアの寿命が大きく減ることはほぼありえないと思います。全く減らないってことも無いとは思いますが。
一つのプログラムの読み書き回数よりも、OSによる読み書きのほうが圧倒的に多いと思いますしね。



zakki

リンク

2021/6/21(Mon) 19:23:03|NO.93093

if文はコンパイル時に静的にジャンプ先が決まっててスタックを使わないようです。
https://github.com/onitama/OpenHSP/blob/hsp36b5/src/hspcmp/codegen.cpp#L1218
https://github.com/onitama/OpenHSP/blob/hsp36b5/src/hsp3/hsp3code.cpp#L1909



tetete

リンク

2021/6/22(Tue) 20:41:05|NO.93097

ありがとうございました!
とりあえず謎が解けました。
ストレージの書き込み回数については、ネット上で「書き込み回数500回が限度」とか何とかモノモノしく書かれていたのについ惑わされました。



記事削除

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

NO.93075への返信

マスコット

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

名前

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

削除用パスワード

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

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

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