---php内核研究
a767536305
这个作者很懒,什么都没留下…
展开
-
全局变量EG、CG
EG在PHP的源码中,大量充斥着EG、PG这种宏定义。在zend_globals_macros.h中,可以看到EG的定义: #ifdef ZTS # define EG(v) TSRMG(executor_globals_id, zend_executor_globals *, v) #else # define EG(v) (executor_globals.v)原创 2016-05-30 09:39:16 · 1885 阅读 · 0 评论 -
垃圾回收一
垃圾回收是内存管理重要模块之一,但并不是全部的内存都是垃圾。比如一个定义一个函数的局部变量,在函数执行完之后这个变量就会自动地被撤回,因此这个变量所占用的内存已经被系统收回,自然就不是垃圾了。 那么垃圾的定义是什么呢?垃圾主要是用来描述那些已经不用但却无法回收的内存。 在php内核中,变量的数据结构是:struct _zval_struct { /*Va原创 2016-05-30 09:46:10 · 395 阅读 · 0 评论 -
编写扩展模块和其生命周期
扩展模块有时候,为了某些原因我们需要自己编写php的扩展库。本篇文章,就是简单说明一下如何编写php的扩展库(在windows上)。在php的源码目录中,有个ext文件夹。进入里面,可以看到两个文件,ext_skel_win32.php文件,我们使用php执行一下这个文件,就能创建我们的扩展库的基本框架。 比如: Php –f ext_skel_win32.php –extname=test执行原创 2016-05-30 09:42:28 · 464 阅读 · 0 评论 -
垃圾回收二
上篇文章讲到了PHP的垃圾回收机制,但是引用计数这种垃圾回收机制是无法回收循环引用这种垃圾的,所以在新的版本中,PHP引入了一种新的垃圾回收机制,这个回收机制的具体实现在上文中已经大概讲过了。 当一个变量在被销毁的时候,如果引用计数大于1的话,那么就会将这个变量保存到缓存区中,并且标记为紫色。 当在某个一个点上,有个新的变量被加入到缓存区的时候,并且这个时候缓冲区满了,这个时候就会原创 2016-05-30 09:48:36 · 430 阅读 · 0 评论