ホームページ  >  記事  >  バックエンド開発  >  PHP7ソースコードのCGマクロとEGマクロの詳細説明

PHP7ソースコードのCGマクロとEGマクロの詳細説明

*文
*文オリジナル
2017-12-25 09:56:333327ブラウズ

PHP ソースコードを読むと、多くのマクロに遭遇します。これらのマクロの意味を理解していないと、コードを理解するのに非常に困難が生じます。ここで、CG と EG という 2 つのマクロの意味を見てみましょう。

CG

意味

CG の意味は、compiler_globals です。 Zend コンパイラ関連のグローバル変数。

関数

PHP コードは最終的に実行のためにオペコードに変換されることは誰もが知っています。 PHP から Opcode への変換中に、一部の情報を保存する必要があります。この情報は CG グローバル変数に保存されます。

Zend が PHP コードを Opcode に変換し、GC グローバル変数を使用してその情報を保存する方法を知りたい場合は、Zend/zend_lang_scanner.c ファイルのcompile_file(zend_file_handle *file_handle, int type) メソッドを参照してください。

コード

Zend の /zend_globals_macros.h ファイルには、このマクロに関連するコードが含まれています。以下の通り:

/* Compiler */
#ifdef ZTS
<h1>define CG(v) ZEND_TSRMG(compiler_globals_id, zend_compiler_globals *, v)</h1>
#else
<h1>define CG(v) (compiler_globals.v)</h1>
extern ZEND_API struct _zend_compiler_globals compiler_globals;
#endif

EG

meaning

EG は executor_globals を意味します。 Zend エグゼキュータに関連するグローバル変数。

機能

Zend エンジンがオペコードを実行するとき、実行中のステータスを記録する必要があります。たとえば、現在実行中のクラスのスコープ、現在ロードされているファイルなどです。

コード

このマクロに関連するコードは Zend/zend_globals_macros.h ファイルにあります。以下の通り:

/* Executor */
#ifdef ZTS
<h1>define EG(v) ZEND_TSRMG(executor_globals_id, zend_executor_globals *, v)</h1>
#else
<h1>define EG(v) (executor_globals.v)</h1>
extern ZEND_API zend_executor_globals executor_globals;

Others

EGとCGは一部のデータを共有しています。たとえば、function_table (ストレージメソッド情報)、class_table (ストレージクラス情報) です。

関連するコードは、次のように Zend/zend_execute_API.c の init_executor メソッドで見つかりました:

void init_executor(void) /* {{{ */
{
    zend_init_fpu();
    ......
    EG(function_table) = CG(function_table);
    EG(class_table) = CG(class_table);
    ......
    }


以上がPHP7ソースコードのCGマクロとEGマクロの詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。