1

誰かが私にこの簡単な質問に答えることができるかどうか疑問に思っていました. 検索してみましたが、同様の質問が表示されますが、文脈が間違っています。

私が疑問に思っているのは、このコードを取ることです:

function foo()
{
    $test_array = array();
    for($i=0; $i<10000000; $i++)
    {
        $test_array[] = $i;
    }
}

関数が終了した後、$test_array はどうなりますか。私はそれがスコープを失うことを知っています、私はプログラミングに慣れていません。

私が疑問に思っているのは、私が電話すべきかということです

unset($test_array);

関数が終了する前に、または PHP が関数の終了時にガベージ コレクターに削除するように設定しますか?

for ループを使用して、適切なサイズの変数を表示し、要点を伝えました。

ケビンを読んでくれてありがとう

4

2 に答える 2

3

$test_arrayスコープ内になくなると (そしてそれを指す追加の参照がなくなると)、ガベージ コレクションのフラグが立てられます。

プロセスが関数から呼び出しルーチンに戻ると、スコープ内になくなります。

したがって、その必要はありませんunset

$test_arrayこれは、 として宣言した場合にのみ異なりますstatic

于 2012-03-02T20:59:25.753 に答える
0

unset() は、変数が使用するメモリを解放しません。メモリを解放するタイミングを決定するガベージ コレクター用にマークするだけです (空き CPU サイクルがあるとき、またはメモリが不足したときのいずれか早い方)。

ただし、スクリプトが終了すると、ほとんどの場合、ミリ秒単位で測定されるPHPスクリプトによって使用されるすべてのメモリが解放されることに注意する必要があります。そのため、「通常の」実行時間を超えるような長い操作を行っていない場合PHP スクリプトの場合、メモリの解放について心配する必要はありません。

于 2012-03-02T21:09:46.713 に答える