zoukankan      html  css  js  c++  java
  • [PHP] PHP5中的写时复制change on write

    php变量在赋值的时候是增加的引用计数,并不是又创建了一块内存空间

    但是当新的变量值变更时 , 值从新赋予新的值时 , 就会减掉刚才的引用计数,并且从新创建内存空间.

    上面的内容是显而易见的,重新赋值自然会重新创建内存空间,但是有一种情况也会发生这样的事 , 那就是在使用到引用符&的时候 , 也会发生复制.

    例如下面的代码:

    <?php
    $a="shihan";
    $b=$a;
    $c=$a;
    xdebug_debug_zval('a','b');
    a: (refcount=3, is_ref=0)='shihan'
    b: (refcount=3, is_ref=0)='shihan'
    $a="shihan";
    $b=&$a;
    $c=$a;
    xdebug_debug_zval('a','b');
    a: (refcount=2, is_ref=1)='shihan'
    b: (refcount=2, is_ref=1)='shihan'

    下面这个$b=&$a会产生复制 , 当进行函数传参时 , 内容占用增大

    <?php
    $a="shihan";
    $b=&$a;
    $c=$a;
    function test2($d){}
    test2($b);
    xdebug_debug_zval('a','b');
    var_dump(memory_get_usage());//633208
    
    <?php
    $a="shihan";
    $b=$a;
    $c=$a;
    function test2($d){}
    test2($b);
    xdebug_debug_zval('a','b');
    var_dump(memory_get_usage());//633128

    当没有在函数内部更改这个值的需求时 , 不要用引用

  • 相关阅读:
    zoj 3279 线段树 OR 树状数组
    fzu 1962 树状数组 OR 线段树
    hdu 5057 块状链表
    hdu3487 Play with Chain
    bzoj 1588营业额统计(HNOI 2002)
    poj2823 Sliding Window
    poj2828 Buy Tickets
    poj2395 Out of Hay
    poj3667 Hotel
    poj1703 Lost Cows
  • 原文地址:https://www.cnblogs.com/taoshihan/p/12403287.html
Copyright © 2011-2022 走看看