类别:PHP问题 / 日期:2019-12-02 / 浏览:103 / 评论:0

php5和php7垃圾接纳上的辨别

PHP5和PHP7的垃圾接纳机制都属于援用计数,但是在庞杂数据类型的算法处理上:PHP7中zval有了新的完成体式格局。

最基本的变化就是 *zval 须要的内存不再是零丁从堆上分派,不再本身存储援用计数。庞杂数据类型(比方字符串、数组和对象)的援用计数由其本身来存储。

这类完成体式格局有以下优点:

1、简朴数据类型不须要零丁分派内存,也不须要计数;

2、不会再有两次计数的状况。在对象中,只要对象本身存储的计数是有用的;

3、因为如今计数由数值本身存储,所以也就能够和非 zval 构造的数据同享,比方 zval 和 hashtable key 之间。

什么叫做援用计数?

因为PHP是用C来写的,C内里有一种东西叫做构造体,我们PHP的变量在C中就是用这类体式格局存储的。

每一个PHP的变量都存在于一个叫做zval的容器中,一个zval容器,除了包含变量名和值,还包含两个字节的分外信息:

● 一个叫做'is_ref',是个布尔值,用来示意这个变量是不是属于援用鸠合,经由过程这个字节,我们php才能把一般变量和援用变量辨别开来。

● 第二个分外字节就是'refcount',用来示意指向这个容器的变量的个数。

PHP5 与 PHP7 援用计数的对照

php 5.* 变量赋值等操纵援用计数如图所示,在倒数第二步,会构成一个轮回援用,而且在 unset 操纵以后,会发生垃圾。

PHP 7 的计数放到了细致的 value 中,zval 不存在写时复制(写时星散)。

而且 PHP 7 的有一个特地的 zend_reference 用来示意援用。

以上就是php5和php7垃圾接纳上的辨别是什么?的细致内容,更多请关注ki4网别的相干文章!

打赏

感谢您的赞助~

打开支付宝扫一扫,即可进行扫码打赏哦~

版权声明 : 本文未使用任何知识共享协议授权,您可以任何形式自由转载或使用。

 可能感兴趣的文章

评论区

发表评论 / 取消回复

必填

选填

选填

◎欢迎讨论,请在这里发表您的看法及观点。