首页 / PHP / PHP7源码之CG和EG宏的详解
PHP7源码之CG和EG宏的详解
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了PHP7源码之CG和EG宏的详解,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1601字,纯文字阅读大概需要3分钟。
内容图文
![PHP7源码之CG和EG宏的详解](/upload/InfoBanner/zyjiaocheng/141/b88a8e3e3342476c8445508ae213e8cd.jpg)
CG
含义
CG的含义是 compiler_globals。Zend编译器相关的全局变量。
作用
大家都知道PHP代码最终是转化为Opcode去执行的。在PHP转换为Opcode过程中需要保存一些信息。这些信息就保存在CG全局变量中。
如果想了解Zend是如何把PHP代码转换为Opcode,使用GC全局变量保存了那些信息,可以查看 Zend/zend_language_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
含义
EG的含义是 executor_globals。Zend执行器相关的全局变量。
作用
Zend引擎在执行Opcode的时候,需要记录一些执行过程中的状态。如,当前执行的类作用域,当前已经加载了那些文件,等。
代码
在 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;
其他
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宏的详解的详细内容,更多请关注Gxl网其它相关文章!
内容总结
以上是互联网集市为您收集整理的PHP7源码之CG和EG宏的详解全部内容,希望文章能够帮你解决PHP7源码之CG和EG宏的详解所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。