PHP ·

PHP7 与 PHP5 有什么区别?

1. zval 结构体的变化
内存: 24 byte -> 16 byte
组成: 一个union联合体 -> 三个union联合体;去掉了引用计数(zend_reference);对于小于 8 byte 的 变量类型直接存储到 value 中,大于 8 byte 在 value 中存储一个指针,指向真实的存储结构地址
2. 优化数组的键值查找
新增 zend_string 除了 长度和指针外,增加了hash 字段(zend_ulong),用来保存string 的 哈希值
3. 变量内存使用方式优化:变量由堆动态申请内存 -> 栈内存, 减少内存分配。PHP7 会在栈上分配一块内存,存放 zval 节省大量的内存分配和管理
4. PHP编译优化:加入了 AST 抽象语法树,将编译和执行解耦,提高编译的扩展性。编译的产物就是 zend_op_array(opline 组成,opline 又有 opcode组成)
5. 执行器层面的优化:执行器的调用函数(execute_ex() 负责将PHP代码编译成 ZendVM 指令)execute_data、opline 变量采用 寄存器存储,不再通过参数传递(PHP5)避免频繁的出入栈操作,寄存器比内存离 CPU 更近,访问速度更快

参与评论