>  기사  >  백엔드 개발  >  PHP7 소스 코드의 CG 및 EG 매크로에 대한 자세한 설명

PHP7 소스 코드의 CG 및 EG 매크로에 대한 자세한 설명

*文
*文원래의
2017-12-25 09:56:333330검색

PHP 소스 코드를 읽으면 많은 매크로를 접하게 됩니다. 이러한 매크로의 의미를 이해하지 못하면 코드를 이해하는데 많은 어려움을 겪게 됩니다. 이제 두 매크로 CG와 EG의 의미를 살펴보겠습니다.

CG

의미

CG의 의미는 컴파일러_글로벌입니다. Zend 컴파일러 관련 전역 변수.

Function

PHP 코드는 결국 실행을 위해 Opcode로 변환된다는 사실은 누구나 알고 있습니다. PHP에서 Opcode로 변환하는 동안 일부 정보를 저장해야 합니다. 이 정보는 CG 전역 변수에 저장됩니다.

Zend가 PHP 코드를 Opcode로 변환하고 GC 전역 변수를 사용하여 해당 정보를 저장하는 방법을 알고 싶다면 Zend/zend_언어_scanner.c 파일

Code

의 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 실행기와 관련된 전역 변수입니다.

Function

Zend 엔진이 Opcode를 실행할 때 실행 중 일부 상태를 기록해야 합니다. 예를 들어 현재 실행 중인 클래스의 범위, 현재 로드되는 파일 등입니다.

Code

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.