认识Zval

什么是Zval

Zval是PHP中变量的结构体
结构体

{key,value,ref_count,is_ref,type}

翻译后的结构体:{键,值(使用的是联合结构体),使用计数器,引用计数器,类型}

有哪些类型

IS_NULL, IS_LONG, IS_STRING, IS_ARRAY, IS_OBJECT

引用计数器

每当我们新建一个变量的时候,操作系统都会开辟一份空间通过结构体将变量存储起来。那么相同的键值进行建立那么会使系统显得笨重起来(意味着每次操作都要开辟空间生成变量),那么这时候引入了引用计数器。引入计数器主要是对同一个内存数据进行统一管理。

心得:

上面只是简单的写到ZVAL结构体的解释,主要的是想要引入垃圾回收机制和对hashtable的探究。

附上结构体PHP5

struct _zval_struct {
     union {
          long lval;
          double dval;
          struct {
               char *val;
               int len;
          } str;
          HashTable *ht;
          zend_object_value obj;
          zend_ast *ast;
     } value;
     zend_uint refcount__gc;
     zend_uchar type;
     zend_uchar is_ref__gc;
};

根据type字段的值不同, 我们就要用不同的方式解读value的值, 这个value是个联合体, 比如对于type是IS_STRING, 那么我们应该用value.str来解读zval.value字段, 而如果type是IS_LONG, 那么我们就要用value.lval来解读.

文献

  1. 这一篇文章详细讲述Zval的内容,包括发展史和存在的问题
    https://www.laruence.com/2018/04/08/3170.html
  2. 官网计数器的详解
    https://www.php.net/manual/zh/features.gc.refcounting-basics.php
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值