投稿
bigslope bigslope
昔のBASICって、一度定義した配列変数は、その要素数を変えられないのが当たり前だったけど、こっちは普通に増やしたり減らしたり出来るんだよね。内部のメモリの割り当て状況なんかを考えると、「大丈夫なのかなあ…?」と心配になるが、まあ大丈夫だから実装されているんだろうけどね。
5そうだね
プレイ済み
返信[1]
親投稿
ゆうたん yu-tan-sama
実はあまり大丈夫でもなかったり… きっかけは不明ですがちょっとずつFREEMEMが減っていきます 表示してみるとおもしろいかも でも、今時の言語なら動的なメモリ割り当ては普通ですねぇ
0そうだね
プレイ済み
返信[2]
親投稿
bigslope bigslope
内部の状況を推測してみると、例えば、 ・変数A(4バイト) ・配列変数B(4バイト×10要素) ・変数C(4バイト) の順番に変数が定義されたとして、配列Bの要素が減る分には問題無いのですが、逆に増えるとなると、変数Cの後ろに移転させなければなりません。 その結果、 ・変数A(4バイト) ・空き(40バイト) ・変数C(4バイト) ・配列変数B(4バイト×10要素) というようなメモリの利用状況になります。 その後、新しく定義した変数や配列変数が、その空いた部分に収まれば良いのですが、そうでない場合は、配列変数Bのさらに後ろに置かなければならず、これを繰り返していると、空いているのに使えないメモリがどんどん増えていくという、メモリのフラグメンテーションが発生してしまいます。 昔のBASICはメモリが少なかったから、それが起きないように、要素数が変更出来ないようにしていたのかもなあ…。
0そうだね
プレイ済み