1、php引用计数器和垃圾回收机制谈到引用计数器和垃圾回收机制,必须得从php变量说起。总所周知,php是一种弱类型,但具体表现在哪里,程序里面又是怎么表现的呢?php里面又是怎样实现引用计数器的,程序如何区分变量引用和复制?php是如何对已用完的变量进行回收,不同的php版本的不同的垃圾回收机制又是如何实现的?1.引用计数器讲到引用计数器,不得不先说一下变量的c语言实现。如下,几个变量的结构体和联合体:zvalue_value联合体:typedef union _zvalue_value { long lval;
2、 /* long value */ double dval; /* double value */ struct { char *val; int len; } str; HashTable *ht; /* hash table value */ zend_object_value obj; } zvalue_value; zval的结构:struct _zval_struct { /* Variable information */ zvalue_va
3、lue value; /* value */ zend_uint refcount__gc; zend_uchar type; /* active type */ zend_uchar is_ref__gc; }; zval可以看成一个容器,zvalue_value是该容器存储变量值的联合体,refcount__gc是引用计数,记录引用数,is_ref__gc是标志这个容器是否真正的引用,type表示这个变量的类型。zend根据type值来决定访问value的哪个成员,可用值如下:IS_NULLN/AIS_LON