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 条评论
登录 后参与评论

相关文章

来自专栏海天一树

小朋友学C语言(34):main函数的参数

C/C++中的main()函数,可以带形式参数,也可以不带形式参数。这两种形式分别为: 1)int main() 2)int main(int argc, ch...

2666
来自专栏Jackson0714

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

3026
来自专栏Laoqi's Linux运维专列

sed命令扩展–转载

文本处理工具之二 sed命令详解 sed:Stream Editor文本流编辑,sed是一个“非交互式的”面向字符流的编辑器。能同时处理多个文件多行的内容,可以...

2975
来自专栏蓝天

sed 命令+正则表达式

sed是一个非交互性性文本编辑器, 它编辑文件或标准输入导出的文件拷贝。标准输入可能是来自键盘、文件重定向、字符串或变量,或者是一个管道文件。sed可以随意编辑...

842
来自专栏LIN_ZONE

Shell编程基础

请参考:菜鸟教程参数传递 在执行脚本的时候可以向脚本传递参数,脚本获取参数的格式为:$n

592
来自专栏跟着阿笨一起玩NET

数据库模糊搜索时,关键字中有%号,怎么办?

本文转载:http://www.cnblogs.com/lmfeng/archive/2013/02/26/2932963.html

1262
来自专栏架构说

声明和定义的区别(深入理解)

问题 声明和定义区别 definition declared 微信排版支持makdown语法不友好 可以查看原文链接 先看一下 例子1 编译有没有问题? cl...

26310
来自专栏Golang语言社区

【基础篇】Go 语言结构

Go Hello World 实例 Go 语言的基础组成有以下几个部分: 包声明 引入包 函数 变量 语句 & 表达式 注释 接下来让我们来看下简单的代码,该代...

33012
来自专栏Python小屋

详解Python序列解包(3)

本文主要介绍调用函数传递参数时序列解包的用法。在调用函数传递参数时,可以在实参序列前加一个星号*进行序列解包,或在实参字典前加两个星号**进行解包,本文介绍第一...

2614
来自专栏zingpLiu

浅谈JavaScript词法分析步骤

JavaScript代码运行前有一个类似编译的过程即词法分析,词法分析主要有三个步骤:

885

扫码关注云+社区