本帖最后由 klend 于 2011-04-15 10:57:16 编辑

解决方案 »

  1.   

    如果测试的话 建议 index.html 文件在200k以上
      

  2.   

    <?php
    $c = 1;
    function c($a)
    {
    $f = $a; //变量未分离,$f和$a都指向的同一个zval,只是zval的refcount+1
    //$f = 3;//变量分离,内存重新为$f分配了一个zval,如果你取消这一行注释,结果会和a函数一致
    echo memory_get_usage();
    }
    function a( &$a)
    {
    $f = $a;//变量分离,内存重新为$f分配了一个zval
    echo memory_get_usage();
    }
    $c = 1;
    c( $c );
    echo "<br/>";
    a( $c );
    ?>
      

  3.   

    你是怎么理解的呢?
    首先了解下php变量的分解和引用机制,这里有篇文章写的简单易懂,你看看
    http://www.laruence.com/2008/09/19/520.html
      

  4.   

    理解参考/**
     * 非引用函数传递,内存只分配了空间存储变量名,而它们对应的zval结构体并没有重新分配
     * zval结构体是存变量名对应的值,共用计数(refount),引用计数(is_ref)等..
     */
    $x = 1;
    //相当于function($y)
    $y = $x; //refcount=2,is_ref=0
    echo debug_zval_dump($y)."<br/>";//refcount = 2,is_ref=0,debug_zval_dump函数调用会有一次变量分离,所以显示refcount为3
    $n = $y;
    echo debug_zval_dump($n)."<br/>";//refcount = 3,is_ref=0/**
     * 引用函数传递,内存即分配了空间存储变量名,又因为变量进行了分离,从而分配了新的空间存储新的zval.
     */
    $x = 1;
    //相当于function(&$t)
    $t = &$x;//refcount=1,is_ref=1
    $m = $t;//变量分离,内存就为$m变量分配了一个存储变量名'm'的空间,以及其对应的zval结构体
    echo debug_zval_dump($m)."<br/>";//refcount = 1,is_ref=0,debug_zval_dump函数调用会有一次变量分离,所以显示refcount为2
      

  5.   

    echo memory_get_usage() .'<br />';function foo($v) {
      $t = $v;
      echo memory_get_usage() .'<br />';
      unset($t);
      echo memory_get_usage() .'<br />';
    }$s = str_pad('a', 1024);echo memory_get_usage() .'<br />';foo($s);
    foo(&$s);
    343888
    344928
    345200
    345200
    346240
    345200
      

  6.   

    补充说明
    344928-343888 = 1040 为变量 $s 所占空间传引用
    346240-345200 = 1040 为赋值给 $t 时 $t 所占空间