PHP内核之旅-4.可变长度的字符串
Posted 7年一线互联网经验,超爱图解底层原理,全栈一枚
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP内核之旅-4.可变长度的字符串相关的知识,希望对你有一定的参考价值。
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\' 字符串结束符
参考资料:
http://www.php-internals.com/
PHP7内核剖析
作 者:
Jackson0714
出 处:http://www.cnblogs.com/jackson0714/
关于作者:专注于微软平台的项目开发。如有问题或建议,请多多赐教!
版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
特此声明:所有评论和私信都会在第一时间回复。也欢迎园子的大大们指正错误,共同进步。或者直接私信我
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是作者坚持原创和持续写作的最大动力!
以上是关于PHP内核之旅-4.可变长度的字符串的主要内容,如果未能解决你的问题,请参考以下文章
我的Android进阶之旅关于Android平台获取文件的mime类型:为啥不传小写后缀名就获取不到mimeType?为啥android 4.4系统获取不到webp格式的mimeType呢?(代码片段
我的Android进阶之旅关于Android平台获取文件的mime类型:为啥不传小写后缀名就获取不到mimeType?为啥android 4.4系统获取不到webp格式的mimeType呢?(代码片段