GCとは、「ガーベジコレクタ」の略で、不要になったメモリの解放を自動で行う機能です。
Spinelでは完全なGCをサポートしているわけではありませんが、効率よくメモリを利用する機能が実装されています。
この機能をSpinelではGCと呼ぶことにします。
GCについて
GCとは、「ガーベジコレクタ」の略で、不要になったメモリの解放を自動で行う機能です。
Spinelでは完全なGCをサポートしているわけではありませんが、効率よくメモリを利用する機能が実装されています。 この機能をSpinelではGCと呼ぶことにします。 実行のタイミング
GCが呼ばれるタイミングは、以下の通りです。
また、ローカル変数がメモリ解放の対象となります。 では例です。
GCは上のように、おもにブレースを抜ける点で呼び出されます。 では、GCありとGC無しではメモリのがどう変化するのか見てみましょう。
GCの有効を切り替えるには、SetGCという命令を使用します。 引数にTrueを与えると有効に、Falseを与えると無効になります。
結果です。作者のパソコンでは、
このように、メモリを適宜解放するので、メモリの多量消費を避けることができます。 ただし、GCが有効になっている場合、処理速度が多少落ちます。 その場合は、GCを無効にすることで処理速度を速くすることができます。
また、GCが有効な場合はプログラム終了時に行われるGCで一斉に解放しなくてもすむので、終了処理にかかる時間も短縮できます。
強制的にGCを実行する
GCはブレースから抜ける際に実行されます。 ですから、ループ文などではすべてのループが終了しなければGCが実行されることはありません。 その場合は、強制的にGCを呼び出す必要があります。
上のような例では、GCがうまく動作してくれません。 そのため、以下のようにする必要があります。
ループの最後にGCを入れます。 こうすることで、毎回GCが呼ばれます。 |