1 zval はスタック メモリを使用します
Zend エンジンと拡張機能では、多くの場合 PHP 変数を作成する必要があり、最下層はzval ポインタ。以前のバージョンでは、MAKE_STD_ZVAL を使用して、ヒープから zval メモリを動的に割り当てていました。 (推奨される学習: PHP ビデオ チュートリアル )
PHP7 はスタック メモリを直接使用できます。 PHP コードで作成された変数も最適化されており、PHP7 は zval をスタック メモリに直接事前に割り当てます。これにより、多くのメモリ割り当てとメモリ管理操作が節約されます。
2 番目の zend_string にはハッシュ値が格納され、配列クエリでハッシュを繰り返し計算する必要がなくなりました。
PHP7 は、char * ポインターに加えて、zend_string という文字列の新しい型を作成します。さらに、文字列のハッシュ値を保存するためのハッシュ フィールドが追加されます。
配列は PHP の中核となるデータ構造です。多くの場合、PHP プログラムでは $array[$key] 操作が多数使用されます。ハッシュテーブル検索の時間計算量は O(1) ですが、$key はハッシュに変換されるため、値を計算する必要があります。
配列操作だけでなく、実際には、PHP の最下層は、クラス属性、クラスメソッド、関数にアクセスするときに、まずハッシュテーブルを通じて対応するポインターを見つけてから、対応する操作を実行する必要があります。 PHP7 より前は、Zend エンジンはハッシュ値の計算に多くの CPU 時間を使用していました。
実際、PHP プログラムの実行後、ほとんどの場合、$key の値は変更されません。 PHP7 ではハッシュ値を保存し、次回から直接使用するため、多くのハッシュ計算操作が節約され、PHP のハッシュテーブルのパフォーマンスは C 配列のパフォーマンスと一致します。
データを 3 つのハッシュテーブル バケットに直接保存します。
PHP5 のハッシュテーブルの各要素はバケット* ですが、PHP7 はバケットを直接保存するため、メモリ アプリケーションの数が減り、キャッシュが向上します。ヒット率とメモリアクセス速度。
4 つの zend_parse_parameters をマクロ実装に変更
PHP の C 拡張関数と PHP の変数の間にパラメータを入力する場合は、zend_parse_parameters() 関数を使用します。 a string パラメーターは、PHP に対応する zval ポインターを検索し、それを割り当てます。実際、この関数には一定のパフォーマンス コストがかかります。
PHP7 はマクロを直接使用して zend_parse_parameters 関数を置き換えます。C 拡張機能では、パラメータを 1 つずつ検索するために zend_parse_parameters を使用する必要はなくなりました。パラメータの割り当てはマクロ展開後に自動的に実装されます。これだけでパフォーマンスが 5% 向上します。
5 4 つの新しい OPCODEs
多くの PHP プログラムは、call_user_function、is_int/string/array、strlen、定義済み関数を多数使用します。 PHP5は拡張関数の形で提供されており、PHP7のこれら4種類の関数は、より高速に実行できるZendVMのOPCODE命令に変更されています。
6 その他のさらなる最適化
上記の 5 つの主要な最適化ポイントに加えて、PHP7 には他のより詳細なパフォーマンスの最適化があります。
以上がphp7 ではどのような最適化が行われましたか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。