PHP 数组为什么这么快:zval、HashTable 和写时复制
PHP 的数组大概是所有语言里最好用的数据结构:能当列表、能当字典、能当集合、能当队列,还保留插入顺序。但它底下到底长什么样?为什么 $a = $b 几乎不花时间?为什么 unset 一堆元素之后内存没降?这篇从 zval 讲到 packed array,再讲写时复制,所有数字都是 PHP 8.3.13 上实测的。一、它不是数组,是一张有序哈希表C 里的数组是一段连续内存,a[5] 就是「首地址
PHP 的数组大概是所有语言里最好用的数据结构:能当列表、能当字典、能当集合、能当队列,还保留插入顺序。但它底下到底长什么样?为什么 $a = $b 几乎不花时间?为什么 unset 一堆元素之后内存没降?这篇从 zval 讲到 packed array,再讲写时复制,所有数字都是 PHP 8.3.13 上实测的。一、它不是数组,是一张有序哈希表C 里的数组是一段连续内存,a[5] 就是「首地址