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'  字符串结束符

参考资料:

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

PHP7内核剖析

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Jackson0714

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

2966
来自专栏大数据钻研

9 个让 JavaScript 调试更简单的 Console 命令

一、显示信息的命令 <!DOCTYPE html> <html> <head> <title>常用console命令</title> ...

30910
来自专栏jeremy的技术点滴

使用fail2ban进行DDOS防护

4115
来自专栏DeveWork

CSS 代码的书写规范、顺序

本文来自设计达人网站,Jeff 看到该文感觉非常有必要学习分享,so,转载在这里,感谢原作者——写了这么久的CSS,但大部分前端er都没有按照良好的CSS书写规...

1979
来自专栏coding for love

CSS进阶08-绝对定位 Absolute Positioning

(注1:如果有问题欢迎留言探讨,一起学习!转载请注明出处,喜欢可以点个赞哦!) (注2:更多内容请查看我的目录。)

671
来自专栏Golang语言社区

Go语言的管道Channel用法实例

本文实例讲述了Go语言的管道Channel用法。分享给大家供大家参考。具体分析如下: channel 是有类型的管道,可以用 channel 操作符 <- 对其...

3455
来自专栏诸葛青云的专栏

C语言编程实例:清空对方应用程序

今天的文章跟大家讲一下,C语言中的文件操作——遍历文件夹和删除文件,以及如何应用这两个技能来写一个有趣的小程序,这篇文章涉及的知识点很少,也很简单,所以这篇文章...

240
来自专栏Fundebug

几点建议帮你写出简洁的JS代码

1466
来自专栏ytkah

Excel表格的35招必学秘技[配图]

一、让数据按需排序   如果你要将员工按其所在的部门进行排序,这些部门名称既的有关信息不是按拼音顺序,也不是按笔画顺序,怎么办?可采用自定义序列来排序。  ...

4178
来自专栏蔡述雄的专栏

包学会之浅入浅出Vue.js:结业篇

本篇我们会详细分析下如何完成由多个组件组成一个复用组件的开发流程。

15.2K23

扫码关注云+社区