美文网首页
PHP之zval的实现

PHP之zval的实现

作者: onefiter | 来源:发表于2021-07-01 22:39 被阅读0次

PHP5中zval中的实现

基于php-5.6.40 中php-5.6.40/Zend/zend.h

319 #include "zend_object_handlers.h"
320 #include "zend_ast.h"
321
322 typedef union _zvalue_value {
323         long lval;                                      /* long value */
324         double dval;                            /* double value */
325         struct {
326                 char *val;
327                 int len;
328         } str;
329         HashTable *ht;                          /* hash table value */
330         zend_object_value obj;
331         zend_ast *ast;
332 } zvalue_value;
333
334 struct _zval_struct {
335         /* Variable information */
336         zvalue_value value;             /* value */
337         zend_uint refcount__gc;
338         zend_uchar type;        /* active type */
339         zend_uchar is_ref__gc;
340 };

PHP5的zval核心由一个zvalue_value类型的联合体和zend_uchar类型的type组成。在PHP5.3之后相继引入了refcount__gc字段通过引用计数进行垃圾回收,同时增加了新的字段is_ref__gc来标记是否为引用类型。默认在i386:x86-64架构下,上面的zvalue_value结构体中lval和dval大小为8字节,str结构体大小为12字节,ht和ast是指针类型,大小为8字节,obj结构体大小为12字节,所以在内存对齐的情况下_zval_struct中的value大小为16字节,加上refcount__gc大小为4字节和两个1字节的type、is_ref__gc, _zval_struct结构体本身大小为24字节(考虑到结构体对齐)内存对齐是为了存取速度更快

相关文章

  • PHP之zval的实现

    PHP5中zval中的实现 基于php-5.6.40 中php-5.6.40/Zend/zend.h PHP5的z...

  • php7变量实现_zval

    php5的变量实现 php通过一个zval结构体来实现变量,对于全局变量,php维护一个全局的hashtable,...

  • PHP7变量的内部实现

    PHP5中的zval PHP5中zval结构体的定义如下: 可以看到,zval由value、type和一些额外的_...

  • php7中的zval结构体

    php7中的zval结构体对比php5优化了很多,一个zval只占用16字节的空间,php7中的zval的结构体如...

  • php7 zval及变量存储方式

    Zval是PHP中最重要的数据结构之一,它包含了PHP中变量的值和类型相关信息。 1. zval 1.1 zval...

  • 引用

    php 引用变量 概念、定义、zval变量容器(用xdebug查看 xdebug_debug_zval('a'))...

  • PHP引用计数

    1. PHP官方手册引用计数介绍 引用计数每个php变量存在一个叫"zval"的变量容器中。一个zval变量容器,...

  • PHP5垃圾回收机制

    在了解垃圾回收机制之前我们必须先来看下zval结构。zval是用于保存变量以及常量的。 php5中的zval数据结...

  • php7的zval相关介绍

    在php7中变量主要由zval保存,只占用16个字节zval结构如下 zval主要由value u1 和u2保...

  • php5和php7-zval

    php5中的zval 1.php5zval中每个字段都明确定义不可修改,为解决循环引用只能进行扩充后实际占用32字...

网友评论

      本文标题:PHP之zval的实现

      本文链接:https://www.haomeiwen.com/subject/dhpsultx.html