码迷,mamicode.com
首页 > Web开发 > 详细

PHP内核之旅-4.可变长度的字符串

时间:2018-05-16 22:38:54      阅读:240      评论:0      收藏:0      [点我收藏+]

标签:val   tle   mes   计算   图片   char   ffffff   ash   字符串   

PHP 内核之旅系列

一、字符串源码

 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.可变长度的字符串

标签:val   tle   mes   计算   图片   char   ffffff   ash   字符串   

原文地址:https://www.cnblogs.com/jackson0714/p/php4.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!