10/09/11 05:44:53
test()の戻り値をLongにしたバージョンでは、グローバル保存値のメッセージボックスでは正しい値が表示されない。
つまり、正常に開放されている。
他の変数型でも試したが、問題が発生するのはString型のみ。
さらに、
test() '☆1
test() '☆2
test() '☆3
として、それぞれ別のグローバル変数に戻り値のポインタを保存させると、☆1~☆3まで、全て参照できる。
つまり、戻り値の文字列がまんまメモリリークしている。
>>647で言ったように、戻り値はヒープ領域ではなくスタック領域が使用される。
結果、(詳しい理屈は知らないが)全ての関数の呼び出しが遅くなる。
例えば、AB標準関数のStr$を1万回呼び出した前と後で、他の関数(win32API等)を1000回呼び、
その時間を図るプログラムを組んだら、明らかにプログラムの動作速度が誤差レベルじゃなく遅くなっていることが確認できる。
つまり、String型の戻り値を持つ関数を繰り返し呼ぶプログラムを組むと、メモリリークがどんどん進み、動作が遅くなる。