一文带你分析php7的zval
时间:2021-09-27
来源:互联网
今天PHP爱好者给大家带来 Zval是PHP中最重要的数据结构之一,它包含了PHP中变量的值和类型相关信息。 zval结构比较简单, 由三个部分组成: 为了更直观的看下zval的结构及核心字段的取值,我们上张图。 对u1.v.type的说明: zval的中zend_value定义如下: 在一个zval中: 所以一个zval占用16字节。相应php5中,一个zval的大小为48字节,的确是巨大的提升。 可根据zval.u1.v.type直接区分,无需zend_value参与 直接存储在zend_value的lval或dval中。 使用zend_value对应的指针,指向其具体的结构。 比如字串类型的结构为 一个字串变量内存组织如下图所示, zval.value.str指向zend_string结构。 Zval是PHP中最重要的数据结构之一,它包含了PHP中变量的值和类型相关信息。 推荐学习:《PHP7教程》 以上就是一文带你分析php7的zval的详细内容,更多请关注php爱好者其它相关文章!1. zval
1.1 zval的结构(zend_types.h)
typedef struct _zval_struct zval;struct _zval_struct {
zend_value value; /* 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_t var_flags;
uint32_t next; /* hash collision chain */
uint32_t cache_slot; /* literal cache slot */
uint32_t lineno; /* line number (for ast nodes) */
uint32_t num_args; /* arguments number for EX(This) */
uint32_t fe_pos; /* foreach position */
uint32_t fe_iter_idx; /* foreach iterator index */
} u2;};
1.2 zend_value
typedef union _zend_value {
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;
} zend_value;
1.3 zval内存占用
2. 变量存储
2.1 true, false, null
2.2 long,double
2.3 其它类型(string,array,object,resource等)
struct _zend_string {
zend_refcounted_h gc;
zend_ulong h; /* hash value */
size_t len;
char val[1];
};
-
艾尔登法环黑夜君复仇者玩法攻略(艾尔登法环黑夜君临和艾尔登法环区别) 时间:2025-07-04
-
死亡搁浅2中的环境危害大全(死亡搁浅第二个boss) 时间:2025-07-04
-
死亡搁浅2怎么击杀米尔人 时间:2025-07-04
-
远光84英文名是什么-Farlight-84游戏 时间:2025-07-04
-
币安怎么充值人民币?-通过法币渠道充值人民币说明 时间:2025-07-04
-
远光84英文名是什么-Farlight-84游戏 时间:2025-07-04
今日更新
-
php获取不到表单数据怎么办
阅读:18
-
php怎么查询某个字段
阅读:18
-
php mysql转义函数有哪些
阅读:18
-
php怎么判断一个变量是不是字符串
阅读:18
-
详解uniapp项目中如何引入axios
阅读:18
-
手把手教你使用CSS制作逼真的水波纹效果(附代码)
阅读:18
-
手把手教你使用ThinkPHP+phpExcel导入导出Excel数据(实践)
阅读:18
-
nodejs模块怎么安装
阅读:18
-
详解mysql double master的配置方法
阅读:18
-
php sqlserver汉字乱码怎么办
阅读:18