分析: PHP ガベージ コレクション メカニズム

WBOY
リリース: 2016-07-25 08:56:35
オリジナル
1016 人が閲覧しました
  1. $a=array(1,4,5);
  2. $b=$a;//配列はコピーされません
  3. $a[1]=10;//配列はをコピーし、値を変更しました
  4. print_r($a);
  5. print_r($b);
  6. ?>
コードをコピー

実行後、$a と $b の値が異なります。 $a は 1,10,5 $b は 1,4,5 これは、C# での値の型の割り当てに似ています。 $a と $b が常に同じ参照を持つようにするには、コードは次のように記述します。

  1. $b=&$a;
コードをコピー

PHP でコピーオンライト技術とともに使用される用語は、参照カウントと呼ばれます。 PHP の各変数は 2 つの部分で構成され、1 つは変数名、もう 1 つは変数の値です。これらはシンボル テーブルと呼ばれる構造に格納され、変数名と値がマップされます。メモリ内の場所。シンボル テーブルの各値には、いわゆる参照カウントがあり、この値を取得する方法の数、つまり、この値を指す変数名の数が記録されます。

上記のコードでは、$a が初期化され、$b=$a の場合、配列の参照カウントは 2 になります (C API メソッドを通じて参照カウントを確認すると、この値は実際には 3 ですが、ユーザーからの参照カウントは 2 です)。という観点からは、2)として説明するのがよいでしょう。 このメモリ内の値は、$a と $b を介して 2 つの方法で取得できます。その後、$a[1] の値が変更されると、PHP は $a 用の新しいメモリ空間を作成します。つまり、2 つの配列が表示されます。 両方の配列の参照カウントは 1 です。

関数内のローカル変数など、変数がスコープ外になり、関数の実行終了後にその変数が無効になった場合、その変数が指す値の参照カウントは 1 つ減ります。同様に、変数が新しいメモリ アドレスを指している場合、古いアドレスの値の参照カウントも 1 減らされます。

メモリ空間の参照カウントが0になると、PHPによって解放されます。



関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!