ホームページ >バックエンド開発 >PHPチュートリアル >PHP 変数とメモリ管理に関する学習メモ
1.memory_get_usage 関数
int memory_get_usage ([ bool $real_usage = false ] )
PHP スクリプトによって使用されるメモリ (memory_get_usage() 関数自体によって占有されるメモリを除く)
memory_get_usage() パラメータ $ real_usage、デフォルトは FALSE です。TRUE に設定すると、取得されるメモリ値は PHP メモリ管理によって占有されるメモリになります。
//php分配到的内存 var_dump(memory_get_usage(true)); //php使用内内存 var_dump(memory_get_usage());
Result
int 262144
int 239368
PHPのメモリ管理メカニズムは、変数を保存するためのスペースを事前に割り当て、スペースが十分でない場合は、新しいスペースを申請します。
memory_get_usage(true) は、事前に割り当てられたメモリです。
これまで PHP ページのメモリ使用量に注意を払ったことはありませんでした。今後ページを最適化するときにも、この関数を使用してコードを分析する必要があります。
2. 変数の割り当てとメモリ
var_dump(memory_get_usage()); $a = "Hello World"; var_dump(memory_get_usage()); $b = $a; var_dump(memory_get_usage()); unset($b); var_dump(memory_get_usage()); unset($a); var_dump(memory_get_usage());
Result
int 239776
int 239912
int 240000
int 239912
int 239776
239912-239776=136
240000-239912=88
$a と $b の割り当てで使用されるメモリが異なります。これは、$b の割り当てでは、出力関数がメモリを割り当てないためです。
さらに、$b を破棄しても、$a が使用するメモリには影響しません。これが、メモリ管理の参照カウントの理由です。
例を変更すると、変数の割り当てとメモリの関係が明確に理解できます
var_dump(memory_get_usage()); $a = "Hello World"; var_dump(memory_get_usage()); $b = "Hello World"; var_dump(memory_get_usage()); unset($b); var_dump(memory_get_usage()); unset($a); var_dump(memory_get_usage());
結果
。int 239816
int 239952
int 240088
int 239952
int 239816
239952-239816=136
240088-239952=136
追加の参照割り当て メモリ占有ルールは直接割り当てに似ています。メモリ管理の参照が含まれます
string
'Hello World' (length=11)refcountは値を指す変数の数ですis_refはアドレス参照があるかどうかを表します
参照カウントの基礎知識
php 変数
は、変数コンテナーに「zval」というファイルが存在します。 zval 変数コンテナには、変数の型と値に加えて、2 バイトの追加情報が含まれています。 1 つ目は「is_ref」です。これは、この変数が参照セットに属しているかどうかを識別するために使用されるブール値です。このバイトを通じて、PHP エンジンは通常の変数と参照変数を区別できます。PHP ではユーザーが & を使用してカスタム参照を使用できるため、zval 変数コンテナーにはメモリ使用量を最適化するための内部参照カウント メカニズムもあります。 2 番目の追加バイトは「refcount」で、この zval 変数コンテナーを指す変数 (シンボルとも呼ばれます) の数を示すために使用されます。すべてのシンボルはシンボル テーブルに存在し、各シンボルにはスコープ (スコープ) があり、メイン スクリプト (例: ブラウザを通じて要求されたスクリプト)、および各関数またはメソッドにもスコープがあります。以上がPHP 変数とメモリ管理に関する学習メモの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。