好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

PHP是如何做垃圾回收的(图文)

PHP是如何做垃圾回收的?

包含 php 5 与 php7 的变量实现和垃圾回收的对比

变量的实现

PHP 的变量是弱类型的,可以表示整数、浮点数、字符串等类型。PHP 的变量是使用结构体 zval 表示的

PHP 5.* zval 和 zend_value 结构

struct _zval_struct { // 结构体
    zvalue_value value;
    zend_uint refcount__gc;
    zend_uchar type;
    zend_uchar is_ref__gc;
}

typedef union _zvalue_value { // 联合体
    long lval;
    double dval;
    struct {
   char *val;
   int len;
    } str; // 字符串
    HashTable *ht; // 数组
    zend_object_value obj; // 对象
    zend_ast *ast;
} zvalue_value;

PHP 7.0 zval 和 zend_value 结构

struct _zval_struct {
    union {
   zend_long    lval;   /* long value */
   double  dval;   /* double value */
   zend_refcounted  *counted;
   zend_string *str;
   zend_array  *arr;
   zend_object *obj;
   zend_resource    *res;
   zend_reference   *ref;
   zend_ast_ref*ast;
   zval   *zv;
   void   *ptr;
   zend_class_entry *ce;
   zend_function    *func;
   struct {
  uint32_t w1;
  uint32_t w2;
   } ww;
    } value;
    union {
   struct {
  ZEND_ENDIAN_LOHI_4(
 zend_uchar    type,    /* active type */
 zend_uchar    type_flags,
 zend_uchar    const_flags,
 zend_uchar    reserved)/* call info for EX(This) */
   } v;
   uint32_t type_info;
    } u1;
    union {
   uint32_tvar_flags;
   uint32_tnext;  /* hash collision chain */
   uint32_tcache_slot; /* literal cache slot */
   uint32_tlineno;/* line number (for ast nodes) */
   uint32_tnum_args;   /* arguments number for EX(This) */
   uint32_tfe_pos;/* foreach position */
   uint32_tfe_iter_idx;/* foreach iterator index */
    } u2;
};

以上就是PHP是如何做垃圾回收的(图文)的详细内容,更多请关注Gxlcms其它相关文章!

查看更多关于PHP是如何做垃圾回收的(图文)的详细内容...

  阅读:46次