Heim >Backend-Entwicklung >PHP-Tutorial >Detaillierte Erläuterung der CG- und EG-Makros im PHP7-Quellcode

Detaillierte Erläuterung der CG- und EG-Makros im PHP7-Quellcode

*文
*文Original
2017-12-25 09:56:333361Durchsuche

Beim Lesen des PHP-Quellcodes werden Sie auf viele Makros stoßen. Wenn Sie die Bedeutung dieser Makros nicht verstehen, führt dies zu großen Problemen beim Verständnis des Codes. Schauen wir uns nun die Bedeutung der beiden Makros CG und EG an.

CG

Bedeutung

CG bedeutet „compiler_globals“. Globale Variablen im Zusammenhang mit dem Zend-Compiler.

Funktion

Jeder weiß, dass PHP-Code schließlich zur Ausführung in Opcode umgewandelt wird. Bei der Konvertierung von PHP zu Opcode müssen einige Informationen gespeichert werden. Diese Informationen werden in globalen CG-Variablen gespeichert.

Wenn Sie wissen möchten, wie Zend PHP-Code in Opcode konvertiert und globale GC-Variablen verwendet, um diese Informationen zu speichern, können Sie sich die Methode „compile_file(zend_file_handle *file_handle, int type)“ der Datei Zend/zend_lingual_scanner.c ansehen

Code

Der relevante Code für dieses Makro befindet sich in der Datei Zend/zend_globals_macros.h. Wie folgt:

/* 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

Bedeutung

EG bedeutet executor_globals. Globale Variablen im Zusammenhang mit dem Zend-Executor.

Funktion

Wenn die Zend-Engine Opcode ausführt, muss sie während der Ausführung einen Status aufzeichnen. Zum Beispiel der Umfang der aktuell ausgeführten Klasse, welche Dateien gerade geladen werden usw.

Code

Der relevante Code für dieses Makro befindet sich in der Datei Zend/zend_globals_macros.h. Wie folgt:

/* 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;

Andere

EG und CG teilen einige Daten. Zum Beispiel function_table (Informationen zur Speichermethode), class_table (Informationen zur Speicherklasse).

Der relevante Code wurde in der init_executor-Methode von Zend/zend_execute_API.c wie folgt gefunden:

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


Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der CG- und EG-Makros im PHP7-Quellcode. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn