作家
登录

PHP的垃圾回收机制——引用计数

作者: 来源: 2017-10-12 13:37:08 阅读 我要评论

例5 Creating a array zval

  1. <?php  
  2.  
  3. $a = array( 'meaning' => 'life''number' => 42 ); 
  4.  
  5. xdebug_debug_zval( 'a' ); 
  6.  
  7. ?> 

以上例程的输出类似于:

  1. a: (refcount=1, is_ref=0)=array ( 
  2.    'meaning' => (refcount=1, is_ref=0)='life'
  3.    'number' => (refcount=1, is_ref=0)=42 

图示:

一个简单数组的zval

这三个zval变量容器是: a,meaning和 number。增长和削减”refcount”的规矩和膳绫擎提到的一样. 下面, 我们在数组中再添加一个元素,并且把它的值设为数组中已存在元素的值:

  1. a: (refcount=2, is_ref=0)='new string' 

例6 添加一个已经存在的元素到数组中

  1. <?php  
  2.  
  3. $a = array( 'meaning' => 'life''number' => 42 ); 
  4.  
  5. $a['life'] = $a['meaning']; 
  6.  
  7. xdebug_debug_zval( 'a' ); 
  8.  
  9. ?> 

图示:

以上例程的输出类似于:

带有引用的简单数组的zval

大年夜以上的xdebug输出信息,我们看到原有的数组元素和新添加的数组元素接洽关系到同一个"refcount"2的zval变量容器. 尽管 Xdebug的输出显示两个值为'life'的 zval 变量容器,其实是同一个。 函数xdebug_debug_zval()不显示这个信息,然则你能经由过程显示内存指针信息来看到。

删除数组中的一个元素,就是类似于大年夜感化域中删除一个变量. 删除后,数组中的┞封个元素地点的容器的“refcount”值削减,同样,当“refcount”为0时,这个变量容器就大年夜内存中被删除,下面又一个例子可以解释:

  1. a: (refcount=1, is_ref=0)=array ( 
  2.  
  3. 'meaning' => (refcount=2, is_ref=0)='life'
  4.  
  5. 'number' => (refcount=1, is_ref=0)=42, 
  6.  
  7. 'life' => (refcount=2, is_ref=0)='life' 
  8.  

例7 大年夜数组中删除一个元素

以上例程的输出类似于:

  1. a: (refcount=2, is_ref=1)=array ( 
  2.  
  3. 0 => (refcount=1, is_ref=0)='one'
  4.  
  5. 1 => (refcount=2, is_ref=1)=... 
  6.  

如今,当我们添加一个数组本身作为这个数组的元素时,工作就变得有趣,下个例子将解释这个。例中我们参加了引用操作符,不然php将生成一个复制。


  推荐阅读

  阿里巴巴发布AliGenie语音开放平台 “智联网”战略又落一子

10月12日消息,在2017杭州&bull;云栖大年夜会上,阿里巴巴人工智能实验室宣布了AliGenie 开放平台,重要包含三大年夜部分:精灵技能市场、硬件开放平台、行业解决筹划,周全赋能智能家居、>>>详细阅读


本文标题:PHP的垃圾回收机制——引用计数

地址:http://www.17bianji.com/lsqh/37855.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)