在 PHP7 中 zval 有了新的实现方式。最基础的变化就是 zval 需要的内存不再是单独从堆上分配,不再自己存储引用计数。复杂数据类型(比如字符串、数组和对象)的引用计数由其自身来存储。这种实现方式有以下好处:
- 简单数据类型不需要单独分配内存,也不需要计数;
- 不会再有两次计数的情况。在对象中,只有对象自身存储的计数是有效的;
- 由于现在计数由数值自身存储,所以也就可以和非 zval 结构的数据共享,比如 zval 和 hashtable key 之间;
- 间接访问需要的指针数减少了。
PHP7 中最重要的改变就是 zval 不再单独从堆上分配内存并且不自己存储引用计数。需要使用 zval 指针的复杂类型(比如字符串、数组和对象)会自己存储引用计数。这样就可以有更少的内存分配操作、更少的间接指针使用以及更少的内存分配。
这也是php7比较快的原因之一。
另外:
PHP7改进了函数的调用机制,通过优化参数传递的环节,减少了一些指令,提高执行效率。
以上来源参考原文 https://blog.csdn.net/zizhilianqiu/article/details/89434782。侵删