ホームページ  >  記事  >  バックエンド開発  >  PHP_PHP チュートリアルで unset を使用して変数を破棄し、メモリを解放する際の問題

PHP_PHP チュートリアルで unset を使用して変数を破棄し、メモリを解放する際の問題

WBOY
WBOYオリジナル
2016-07-21 15:17:36934ブラウズ

コードをコピー コードは次のとおりです:

for ( $i = 1; $i $str = str_repeat('01234567', $i); = メモリ_get_usage($str);
$b = メモリ_get_usage();
エコー "n
".$i.': '.($b - $a).';

結果から:
8 x 32 = 256 256 バイトの長さの場合、実際にはメモリを解放する必要があります。直接 $str = null を実行するよりも速いという人もいます。
結果は次のとおりです:
1: 0 バイト。
4: 0 バイト。
7: 0 バイト。 8: 0 バイト。
10: 0 バイト。
14: 0 バイト。
17: 0 バイト。
21: 0 バイト。
24: 0 バイト。
25: 0 バイト。
27: 0 バイト。
30: 0 バイト。
33: -280 バイト。
35: -296 バイト。
38: -320 バイト。 40: - 336 バイト。
42: -360 バイト。
46: -384 バイト。 : -392 バイト。
49: -408 バイト。
52: -440 バイト。 -448 バイト
55: -464 バイト
58: -488 バイト
61: -504
62: -512 バイト。
64: -536 バイト。
67: -560 バイト。
69: -568 バイト。
71: -584 バイト。
74: -616 バイト。
76: -672 バイト。
77: -640 バイト。
85: -696 バイト。 : -704 バイト。
88: -728 バイト。
91: -752 バイト。 -760 バイト。
95: -776 バイト。
98: -800 バイト。まずは例を見てみましょう



コードをコピーします

コードは次のとおりです:


$s=str_repeat('1' ,255) // 255 個の文字列を生成します
$ m=memory_get_usage(); //現在占有されているメモリを取得します
unset($s);
$mm=memory_get_usage(); //その後、現在占有されているメモリを確認します
echo $m-$mm? >


最後に、unset() 前に占有されていたメモリから unset() 後に占有されていたメモリを引いた値を出力します。これは、unset($s) がすでにメモリ (または他の場所) から破棄されていることを意味します。つまり、unset()) の後でメモリ使用量は減少しますが、PHP5 および Windows プラットフォームでは、結果は -48 でした。これは、unset($s) は変数 $s が占有するメモリを破壊しないことを意味しますか?次の例を見てみましょう:



コードをコピーします

コードは次のとおりです:


$s=str_repeat('1',256) //256 個の 1 から構成される文字列を生成します。
$m=memory_get_usage(); //現在占有されているメモリを取得
unset($s);
$mm=memory_get_usage(); //unset()echo 後に現在占有されているメモリを確認します。 ?> ;


この例は上記の例とほぼ同じですが、唯一の違いは、$s が 256 個の 1 で構成されており、最初の例よりも 1 が 1 つ多いことです。これは、unset($s) が $s によって占有されていたメモリを破壊したことを意味しますか?
上記 2 つの例を通じて、次の結論を導き出すことができます: 結論 1. unset() 関数は、変数値が 256 バイトを超えるメモリ空間を占有している場合にのみメモリ空間を解放できます。
変数の値が 256 を超える限り、unset を使用するとメモリ領域を解放できますか?別の例でテストしてみましょう:



コードをコピーします

コードは次のとおりです:


$s=str_repeat('1',256); //これは次とまったく同じです。 2 番目の例
$m=memory_get_usage(); //$s を破棄します
$mm=memory_get_usage();
$m-$mm

;
' ページを更新すると、最初の行には 256 個の 1 があり、2 行目は -48 であることがわかります。$s を破棄したのは当然であり、$p は $s を参照する単なる変数です。さらに、unset($s) 後のメモリ使用量は、unset() 前に比べて増加しています。次の例を実行してみましょう:
コードをコピーします コードは次のとおりです:

$s=str_repeat('1',256); //これは次とまったく同じです。 2 番目の例
$m=memory_get_usage();
$s=null; //$s を null に設定します
$mm=memory_get_usage(); >';
echo $m-$mm;
?>


ここでページを更新すると、出力 $p に内容がなく、unset() の前後のメモリ使用量の差が 224 であることがわかります。つまり、変数の使用法がメモリからクリアされています。この例の $s=null は、次のように unset() で置き換えることもできます:

コードをコピーします コードは次のとおりです:
$s=str_repeat('1' ,256); / /これは 2 番目の例とまったく同じです
$m=memory_get_usage(); // $s を破棄します
unset($p);
$mm=memory_get_usage( );
echo $p.'
';
echo $m-$mm?>


unset() を使用して次にメモリを見てください。占有率の差も 224 であり、これによってメモリも解放できることがわかります。次に、別の結論が得られます。 結論 2. メモリは、その変数を指すすべての変数 (参照変数など) が破棄された場合にのみ解放されます。
この記事の例を読めば、誰もが unset() について理解できるはずです。少なくとも、私は変数が機能しないときにメモリを解放するために unset() を使用します。


http://www.bkjia.com/PHPjc/325687.html
www.bkjia.com

本当http://www.bkjia.com/PHPjc/325687.html技術記事次のようにコードをコピーします。 for ( $i = 1; $i 100; $i++ ) { $str = str_repeat('01234567', $i); $b = Memory_get_usage (); echo "n ".$i.': '.($b -...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。