php-------unset変数を破棄しメモリを解放

2201 ワード

PHPのunset()関数は変数を消去、破棄するために使用され、使用しない変数はunset()で破棄することができます.しかし、unset()を使用すると、変数を破棄するために使用されるメモリに到達できない場合があります.
まず例を見てみましょう

最後にunset()を出力する前にメモリを使用してunset()を減算した後にメモリを使用します.正数であれば、unset($s)がメモリから$sを破棄したことを示します(あるいは、unset()後にメモリを使用して減少しました).しかし、PHP 5とwindowsプラットフォームの下で、結果は-48です.
これは、unset($s)が変数$sが消費するメモリを破棄する役割を果たしていないことを示していますか?次に例を示します.

この例は、上記の例とほぼ同じであり、唯一の違いは、$sが256個の1からなり、すなわち、第1の例より1個多くなり、結果は:224である.これは、unset($s)が$sで使用したメモリを破棄したことを示していますか?
上記の2つの例から、以下の結論を得ることができます.
結論1、unset()関数は、変数値が256バイトを超えるメモリ領域を占有する場合にのみメモリ領域を解放する.
では、変数値が256を超えるとunsetを使用してメモリ領域を解放できるのではないでしょうか.もう1つの例でテストしてみましょう.
';
echo $m-$mm;
?>

ページをリフレッシュすると、最初の行は256個の1があり、2番目の行は-48で、私たちはすでに$sを破棄しましたが、$pは$sの変数を参照しているだけで、内容がないはずです.また、unset($s)後のメモリ消費量はunset()前より増加しました.次に、次の例を示します.
';
echo $m-$mm;
?>

ページをリフレッシュすると、出力$pにはコンテンツがありません.unset()の前後のメモリ使用量の差は224です.つまり、変数が使用するメモリが消去されています.この例の$s=nullはunset()に変更することもできます.以下のようにします.
';
echo $m-$mm;
?>

$sと$pの両方をunset()で破棄します.この場合、メモリの使用量の差も224であり、メモリを解放することもできます.では、別の結論を得ることができます.
結論2、メモリは、参照変数などの変数を指すすべての変数が破棄された場合にのみ解放されます.
本稿の例を通して、unset()についてよく知っていると思います.少なくとも、本人がunset()を使うのも、変数が機能しないときにメモリを解放するためです.