PHPコピーオンライトの詳しい説明
この記事では主に PHP コピーオンライトの詳細な説明を共有します。皆さんのお役に立てればと思い、例から始めましょう。
<?php$foo = 1; $bar = $foo;echo $foo + $bar;
変数 $foo は変数 $bar に割り当てられます。これら 2 つの変数は同じ値を持ちます。新しいメモリ空間を共有する必要はありません。 多くのシナリオで、PHP の COW はメモリを最適化します。例: 変数の複数の代入、関数パラメータの受け渡し、関数本体内の実際のパラメータの変更など。
「コピー」とは何ですか
これは、Niao 兄弟のブログから引用した例です。わかりやすくなったので、ここに直接投稿しました。
<?php $var = "laruence"; $var_dup = $var; $var = 1;?>
明らかに、このコードが実行された後も、$var_dup の値は依然として「laruence」であるはずですが、これはどのように達成されるのでしょうか?これは PHP のコピーオンライトメカニズムです:
変数を変更する前に、PHP はまず変数の refcount をチェックします。refcount が 1 より大きい場合、実行が到達したときに、PHP は別のルーチンを実行します。最初の 3 行で、PHP は $var が指す zval の refcount が 1 より大きいことを検出し、次に PHP は新しい zval をコピーし、元の zval の refcount を 1 減らして、$var と zval を分離するようにsymbol_table を変更します。 $var_dup (分離) 。このメカニズムは、いわゆるコピー オン ライトです。
コピー オン ライト アプリケーション シナリオ
コピー オン ライト (COW とも略される) には、Linux のプロセス レプリケーションにおけるメモリ使用量の最適化など、C++ などのさまざまなプログラミング言語での多くのアプリケーション シナリオがあります。STL にも同様のアプリケーションがあります。等々。 COW は一般的に使用される最適化方法であり、次のように分類できます。 リソースの遅延割り当て。リソースは、実際に必要な場合にのみ占有され、通常、コピーオンライトによりリソースの使用量が削減されます。
PHP COW がメモリ使用量を最適化することを証明する例:
<?php $j = 1; var_dump(memory_get_usage()); $tipi = array_fill(0, 100000, 'php-internal'); var_dump(memory_get_usage()); $tipi_copy = $tipi; var_dump(memory_get_usage()); foreach ($tipi_copy as $i) { $j += count($i); } var_dump(memory_get_usage());
実行結果:
$ php t . phpint(630904)int(10479840)int(10479944)int(10480040)
メモリは大幅に改善されません。
「コピーオンライト」の原理
同じ値の複数の変数で同じメモリを共有すると、メモリ領域が節約されますが、上記の例の場合、変数の値は変更されます。同じメモリが変更される場合、値が変更される (または変更される可能性がある) 場合、変更された値を「分離」する必要があります。この「分離」操作が「コピー」です。
PHP では、同じ zval アドレスが複数の変数で共有されているかどうかを区別するために、Zend エンジンは識別のために ref_count と is_ref という 2 つの変数を導入します:
ref_count と is_ref は zval 構造体で定義されています
is_ref は次のことを識別しますユーザーは & を必須の参照として使用します。
ref_count は、この zval が参照される変数の数を識別するために使用される参照カウントです。つまり、0 の場合は破棄されます。 $a=$ b; と $a=&$b; は PHP のメモリ使用量に違いがないことがわかります
の実装原理も理解できると思います。 PHP の COW: PHP の COW は参照カウント ref_count に基づいており、Is_ref が実装されています。変数ポインターがもう 1 つある場合、ref_count は 1 ずつ増加します。それ以外の場合は 1 減算され、0 に達すると破棄されます。 ; 同様に、必須参照 & がもう 1 つある場合、is_ref は 1 増加し、1 減少すると破棄されます。
関連する推奨事項:
コピー オン ライトの使用例チュートリアルを要約する PHP でのコピー オン ライト (Copy On Write) の共有コード例 PHP 変数のカウンターとコピー オン ライトを参照する以上がPHPコピーオンライトの詳しい説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

CakePHP でデータベースを操作するのは非常に簡単です。この章では、CRUD (作成、読み取り、更新、削除) 操作について理解します。
