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

*文
Freigeben: 2023-03-18 10:42:02
Original
3326 Leute haben es durchsucht

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
Nach dem Login kopieren

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;
Nach dem Login kopieren

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);
    ......
    }
Nach dem Login kopieren


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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage