トップページ > プログラム > 2016年10月14日 > c0NY+ezm

書き込み順位&時間帯一覧

6 位/206 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000000000000000030115



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
【QBASIC互換!?】FreeBasic【GPL】

書き込みレス一覧

【QBASIC互換!?】FreeBasic【GPL】
812 :デフォルトの名無しさん[]:2016/10/14(金) 20:52:52.30 ID:c0NY+ezm
>>810-811 こんなところ。
'MessageBox(TakaHWND, "Hello (rcPatsTypeReadSub07) " + Str(IAA), "Messagebox caption", MB_ICONINFORMATION)
IAA = rcPatsTypeReadSub07(FileNoLong2, PartsNameSU, PartsTypeString(), PartsTypeNoLong(), GRPnoSULong, GRPNo(), GRPnoPartsSU(), PartsNameString(), PartsNoListLong())

Function rcPatsTypeReadSub07(FileNoLong2 As Long, PartsNameSU As Long, PartsTypeString() as String, PartsTypeNoLong() As Long, GRPnoSULong AS Long, GRPNo() As Long, GRPnoPartsSU() as Long, PartsNameString() as String, PartsNoListLong() as Long) As Long

'(2016.10.12 発見) ここのどこかでハングする
Dim As Long IAA, IBB, ICC, IDD, GRPnoLong
Dim As String Astring, PartsNameString0
Dim As Long TopPartsSU, BotPartsSU, Line1SU, Line2SU, Line3SU, LineTsu1, LineTsu2
Dim As String PartsNameString1(), PartsNameString2(), PartsNameString3()

rcPatsTypeReadSub07 = 0
Print #FileNoLong2, ""
Print #FileNoLong2, "Function DispGRPinsideMove02(IDnoLongGRA As Long, ActionType As Integer, SpaceType As Integer, WidthPoint As Long, HeightPoint As Long, FullWidth As Long, FullHeight As Long) As Long"
(中略)
MessageBox(TakaHWND, "Hello (rcPatsTypeReadSub07 - 6) "+Str$(GRPnoLong)+"-"+Str$(LineTsu1), "Messagebox caption", MB_ICONINFORMATION)
【QBASIC互換!?】FreeBasic【GPL】
813 :デフォルトの名無しさん[]:2016/10/14(金) 20:54:01.32 ID:c0NY+ezm
>>812 のつづき。MessageBox()に挟まれた間の内容
' ここでハング GRPnoLong = 4: LineTsu1 = 14
Print #FileNoLong2, " PartWidth = (FullWidth \ 3) - WidthSpace: IF (PartWidth <= 0) then PartWidth = 0"
Print #FileNoLong2, " PartWidth1 = PartWidth: PartWidth2 = PartWidth: PartWidth3 = PartWidth"
Print #FileNoLong2, " WidthPoint1 = WidthPoint + WidthSpace"
Print #FileNoLong2, " WidthPoint2 = WidthPoint1 + WidthSpace + PartWidth1"
Print #FileNoLong2, " WidthPoint3 = WidthPoint2 + WidthSpace + PartWidth2"
MessageBox(TakaHWND, "Hello (rcPatsTypeReadSub07 - 7) "+Str$(GRPnoLong)+"-"+Str$(LineTsu1), "Messagebox caption", MB_ICONINFORMATION)

てなところ。プリント命令の途中でハングしている。
【QBASIC互換!?】FreeBasic【GPL】
814 :デフォルトの名無しさん[]:2016/10/14(金) 20:56:20.03 ID:c0NY+ezm
現在は、参照側 >>812の
Function rcPatsTypeReadSub07(FileNoLong2 As Long, PartsNameSU As Long, PartsTypeString() as String, PartsTypeNoLong() As Long, (後略)

PartsTypeNoLong()
の内容がすべて 0 になるという現象が発生している。
【QBASIC互換!?】FreeBasic【GPL】
816 :デフォルトの名無しさん[]:2016/10/14(金) 22:31:50.42 ID:c0NY+ezm
>>808 の内容がわからなかったのかな。
別ファイル(モジュール)だから、主ルーチンは存在しない。存在するのはすべてサブルーチンであるから、
Function 適当なルーチン(ActionType As Long)で、ルーチンが定義される。
「適当なルーチン」内で使用する配列
大きさ = 100
Dim 配列1() as long, 配列2() as String
ReDim 配列1(大きさ, 大きさ) as long, 配列2(大きさ, 大きさ) as String
2次元配列を用意しすると、新規に取得したMCB(メモリーコントロールブロック)に作られる場合とスタックに作られる場合があるが
一律 MCB として
1.配列1の所在・大きさを示すアドレス等が変数管理領域に新規登録されて
2.MCBで領域を確保、大きさ, 大きさ、の2次元配列を(数値だから)確保して使用する。

ところが、文字列の場合だと、
2.MCBに領域を確保、大きさ、大きさの2次元配列で、文字の保管場所のアドレスを保管する領域を確保する。
3.文字の保管領域(多くの場合にはスタック)にヌル文字であることを示す内容を保管する。
これは、処理系で異なり、単に文字列+&h0000(又は&h00、前者は2バイト文字対応の場合、後者が1バイト文字の場合)が存在する固定アドレスを保存する場合と、追加して文字長さを保管する場合、あるいは、文字長さのみを保管する場合がある。

MCBに保管しない場合で、全部スタックに保管する場合がある。
Redim 宣言時にヌル文字をスタックに書き出して、新規に文字変数が定義されたときには、スタックに新規に文字を入れて、古い文字を消さないで残している場合には、スタックが急激に消費される。
For IIA = 1 to 10
Astring = Astring + "1"
Next IIA
Astring = ""
の場合には、スタック内文字が消されている場合が多いが
For IIA = 1 to 10
Astring = Astring + "1"
Bstring = Bstring + "1"
Next IIA
Astring = ""
の場合には、スタックが全部残っている可能性がある。
ヌル文字で始まったとしても、2文字+&h00の4文字だから、4+5+...+14 =??? 、???* 2 =???スタックを食いつぶすことになる。
【QBASIC互換!?】FreeBasic【GPL】
817 :デフォルトの名無しさん[]:2016/10/14(金) 23:12:53.82 ID:c0NY+ezm
逆汗したときに
-------------------------
(システム予約)|__(Pgソース)__|___(変数領域)___|___(スタック領域)___|(システム予約)
とメモリーが使われていた。文字の最大文字数が255で文字長さ1の合計256が最大値で
配列を作ると、スタック領域を移動して、スタック領域の後ろに文字領域を確保していた。
ここがいっぱいになってくると、突然GAP(ガーベージコレクション) https://ja.wikipedia.org/wiki/%E3%82%AC%E3%83%99%E3%83%BC%E3%82%B8%E3%82%B3%E3%83%AC%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3
を始めだす。
処理速度が急激に遅くなる場合と、高速な場合とがあり、処理速度が一定していない場合には、ガーベージコレクションを行っていると考えられる。
常に高速な場合には、カーページコレクションをしていないので、スタックあふれや、メモリーリーク
https://ja.wikipedia.org/wiki/%E3%83%A1%E3%83%A2%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%AF
の可能性が出てくる。
このあたりの処理は、ユーザーに開放されていない場合が多いので
怪しいなと思ったらば、メモリーダンプ、再起動して継続処理をするようなユーザーソフトを組む必要が出てくる。

Free-Basic でGAP命令があるのかな?。使う命令しか見ていないので、わからない。


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。