PHP5和PHP7的字符串结构相同点
字符串的储存都是val变量
都是len变量记录字符串的长度
都是recount字段记录引用计数
PHP5和PHP7的字符串结构不同点
字符串结构的完全改变
字符串真正存储val字段的实现方式不同
PHP5:指针方式
PHP7:c语言新特性柔性数组,增加了哈希值的存储,增加了PHP7的gc统一头部
4.1.1 PHP7字符串具体实现
gc字段
存放引用计数
h字段
h 字段的作用是缓存字符串的哈希值,它的值只有当字符串需要被作为数组 key 时才会初始化
val字段
存储字符串的值,类型是char,PHP7的val字段是使用的柔性数组
柔性数组优势:struct中字符串的值与其他成员便存储在一块连续的空间中,分配、释放内存时可当成整体处理,这样读取字符串时可以省一次内存读写
len字段
决定字符串的长度
记录字符串长度的原因:
时间换空间的做法,直接记录以避免重复计算字符串的长度
保证了 PHP 字符串操作二进制安全
4.1.2 字符串的二进制安全
c语言只能保存文本数据。
PHP数据在写入时什么样,读取时就是什么样,这种能力被称为字符串的二进制安全。