ホームページ バックエンド開発 PHPチュートリアル PHP はパフォーマンスを向上させます。設定を解除すると変数が破壊され、メモリが解放されます。

PHP はパフォーマンスを向上させます。設定を解除すると変数が破壊され、メモリが解放されます。

Jun 20, 2016 pm 01:01 PM
php

PHP の unset は変数を破棄し、メモリを解放します

PHP の unset() 関数は、変数をクリアして破棄するために使用されます。unset() を使用して、未使用の変数を破棄できます。ただし、unset() を使用しても、変数が占有しているメモリを破壊できない場合があります。まず例を見てみましょう:

<?php
$s=str_repeat('1',255); //产生由255个1组成的字符串
$m=memory_get_usage(); //获取当前占用内存
unset($s);
$mm=memory_get_usage(); //unset()后再查看当前占用内存
echo $m-$mm;
ログイン後にコピー

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

<?php
$s=str_repeat('1',256); //产生由256个1组成的字符串
$m=memory_get_usage(); //获取当前占用内存
unset($s);
$mm=memory_get_usage(); //unset()后再查看当前占用内存
echo $m-$mm;
ログイン後にコピー

この例は上記の例とほぼ同じですが、唯一の違いは、$s が 256 個の 1 で構成されており、最初の例よりも 1 が 1 つ多いことです。結果は 224 です。これは、unset($s) が $s によって占有されていたメモリを破壊したことを意味しますか?

上記の 2 つの例を通じて、次の結論を導き出すことができます: 結論 1. unset() 関数は、変数値が 256 バイトを超えるメモリ空間を占有している場合にのみメモリ空間を解放できます。

変数の値が 256 を超える限り、unset を使用するとメモリ領域を解放できますか?別の例でテストしてみましょう:

<?php
$s=str_repeat('1',256); //这和第二个例子完全相同
$p=&$s;
$m=memory_get_usage();
unset($s); //销毁$s
$mm=memory_get_usage();
echo $p.'<br />';
echo $m-$mm;
ログイン後にコピー

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

<?php
$s=str_repeat('1',256); //这和第二个例子完全相同
$p=&$s;
$m=memory_get_usage();
$s=null; //设置$s为null
$mm=memory_get_usage();
echo $p.'<br />';
echo $m-$mm;
ログイン後にコピー

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

<?php
$s=str_repeat('1',256); //这和第二个例子完全相同
$p=&$s;
$m=memory_get_usage();
unset($s); //销毁$s
unset($p);
$mm=memory_get_usage();
echo $p.'<br />';
echo $m-$mm;
ログイン後にコピー
unset() を使用して $s と $p の両方を破棄すると、メモリ使用量の差も 224 になり、これによってメモリも解放されることがわかります。次に、別の結論が得られます。 結論 2. メモリは、その変数を指すすべての変数 (参照変数など) が破棄された場合にのみ解放されます。

この記事の例を読めば、誰もが unset() について理解できるはずです。少なくとも、私は変数が機能しないときにメモリを解放するために unset() を使用します。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

CakePHP の日付と時刻

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

CakePHP ファイルのアップロード

CakePHP ルーティング CakePHP ルーティング Sep 10, 2024 pm 05:25 PM

CakePHP ルーティング

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP について話し合う

CakePHP プロジェクトの構成 CakePHP プロジェクトの構成 Sep 10, 2024 pm 05:25 PM

CakePHP プロジェクトの構成

CakePHP クイックガイド CakePHP クイックガイド Sep 10, 2024 pm 05:27 PM

CakePHP クイックガイド

CakePHP バリデータの作成 CakePHP バリデータの作成 Sep 10, 2024 pm 05:26 PM

CakePHP バリデータの作成

See all articles