前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PHP内核之旅-4.可变长度的字符串

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

作者头像
悟空聊架构
发布2018-05-18 12:57:31
1.1K0
发布2018-05-18 12:57:31
举报
文章被收录于专栏:悟空聊架构 | 公众号

PHP 内核之旅系列

PHP内核之旅-1.生命周期

PHP内核之旅-2.SAPI中的Cli

PHP内核之旅-3.变量

PHP内核之旅-4.字符串

一、字符串源码

 zend_string

代码语言:javascript
复制
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'  字符串结束符

参考资料:

http://www.php-internals.com/

PHP7内核剖析

作  者: Jackson0714 出  处:http://www.cnblogs.com/jackson0714/ 关于作者:专注于微软平台的项目开发。如有问题或建议,请多多赐教! 版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。 特此声明:所有评论和私信都会在第一时间回复。也欢迎园子的大大们指正错误,共同进步。或者直接私信我 声援博主:您的鼓励是作者坚持原创和持续写作的最大动力!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-05-16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、字符串源码
  • 二、字符串结构
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档