PHP 内核之旅系列
PHP内核之旅-1.生命周期
PHP内核之旅-2.SAPI中的Cli
PHP内核之旅-3.变量
PHP内核之旅-4.字符串
一、字符串源码
zend_string
1 typedef struct _zend_string ????zend_string; //定义 zend_string变量2 struct _zend_string { //_zend_string结构体3 ????zend_refcounted_h gc;4 ????zend_ulong ???????h; ???????????????/* hash value */5 ????size_t ???????????len;6 ????char ?????????????val[1];7 };
变量 | 描述 | |
1 | gc | 变量的引用计数信息,内存管理会用到 |
2 | h | harh code, 字符串通过Times33算法计算得到的 |
3 | len | 字符串的长度 |
4 | val[1] | 字符串的内容 |
二、字符串结构
注意:
1. zend_string = 引用计数 + 字符串hash code + 字符串长度 + 字符串内容。
2. 字符串val是一个可变数组,val[1]表示默认存放‘\0‘ 字符串结束符。
3. val[0]存放空字符串。当字符串不为空时,val[0 ~ len]存放的是字符串内容。val[len+1] = ‘0\‘
比如‘test‘字符串是这样存放的:
val[0] = ‘t‘
val[1] = ‘e‘
val[2] = ‘s‘
val[3] = ‘t‘
val[4] = ‘\0‘ 字符串结束符
PHP内核之旅-4.可变长度的字符串
原文地址:https://www.cnblogs.com/jackson0714/p/php4.html