ホームページ  >  記事  >  バックエンド開発  >  PHP カーネル (1) メモリ管理、PHP カーネル メモリ管理_PHP チュートリアル

PHP カーネル (1) メモリ管理、PHP カーネル メモリ管理_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-12 09:00:14798ブラウズ

PHPカーネル(1)メモリ管理、PHPカーネルメモリ管理

1.メモリ管理の基本

C言語で開発する場合、開発者は手動でメモリを管理する必要があります。 PHP は Web サーバーのモジュールとして使用されることが多く、メモリ管理はメモリ リークの防止と密接に関係しています。さらに、PHP はスレッド環境で使用される場合があるため、グローバル変数によって競合状態が発生する可能性があります。さらに、Zend エンジンは非常に特殊な使用パターンに直面しています。比較的短期間に、多くの zval 構造サイズのメモリ ブロックとその他の小さなメモリ ブロックが適用され、その後解放されます。PHP のメモリ管理も、memory_limit を非常に重要視します (メモリ制限)

上記のニーズを満たすために、Zend エンジンはリクエスト関連のデータを処理するための特別なメモリ マネージャーを提供します。リクエスト関連データとは、1 つのリクエストを処理するだけで済み、遅くともリクエストの終了時にリリースされるデータを指します。拡張機能の開発者は主に、以下の表にリストされている規則にさらされますが、提供されている便利な関数の一部はマクロを使用して実装されていますが、この記事では関数と同様に扱います。

前述したように、メモリ リークを防止し、すべてのメモリをできるだけ早く解放することは、メモリ管理の重要な部分です。セキュリティ上の理由から、Zend Engine はリクエストの終了時に上記の API によって割り当てられたすべてのメモリを解放します。 PHP が --enable-debug 構成オプションを使用してビルドされている場合、これにより警告が生成されます

PHP変数を使用する場合は、変数のメモリがemallocで確保されていることを確認し、参照数に注意する必要があります。

メモリ リーク検出は、emalloc に割り当てられたメモリ ブロックによって引き起こされたリークのみを検出できます。詳細な分析には、valgrind や libumem などのメモリ検出器を使用することをお勧めします。この分析を簡素化するには、PHP の起動時に環境変数 USE_ZEND_ALLOC=0 を設定して、PHP のメモリ マネージャーを無効にします。

(上記はPHP公式サイトの中国語コンテンツです)

2. データの永続化

データの永続性とは、あらゆるデータが現在のリクエストよりも長く存続すると予想されることを意味します。Zend エンジンを使用しないメモリ マネージャーはリクエストに基づく割り当てに重点を置いていますが、これは通常は実用的または適切ではありません。外部クラス ライブラリの要件を満たすために永続メモリが必要になる場合がありますが、これは便利な「ブラック テクノロジ」でもあります。

永続メモリは通常、永続的なデータベース接続に使用されますが、実際にはあまり良くありませんが、依然として最も一般的に使用される機能です。

注: 追加の永続パラメータを取る以下のすべての関数は false である必要があり、エンジンは通常のアロケーター (emalloc) を使用し、メモリは永続的であるとみなされるべきではありません (変換されません!)。永続メモリとして、メイン メモリ API などのシステム コール アロケーターは、ほとんどの場合、依然として null ポインターを返しません

警告: 永続化に割り当てられたメモリは Zend エンジンによって最適化または追跡されないことに注意してください。また、ハッカーによって作成されたすべての変数を永続化メモリに使用してはなりません。

(翻訳は本当にひどいです!)

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/1094590.html技術記事 PHP カーネル (1) メモリ管理、PHP カーネルのメモリ管理 1. メモリ管理の基本 C 言語で開発する場合、開発者は手動でメモリを管理する必要があります。 PHP は、Web サーバー、メモリのモジュールとしてよく使用されます...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。