不是很清楚你的目标是什么?m = 0;
$m = memory_get_usage();
$t = array('id' => 1, 'name' => 'none');
echo '$t 占用: ', memory_get_usage() - $m, PHP_EOL;
$data = array();
echo '空的 $data 占用: ', memory_get_usage() - $m, PHP_EOL;
$m = memory_get_usage();
for($i=0; $i<1000; $i++) {
  $data[] = null;
}
echo '1000 个空元素的 $data 占用: ', memory_get_usage() - $m, PHP_EOL;
$data = array();
$m = memory_get_usage();
for($i=0; $i<1000; $i++) {
  $data[] = $t;
}
echo '1000 个$t元素的 $data 占用: ', memory_get_usage() - $m, PHP_EOL;
$data = array();
$m = memory_get_usage();
for($i=0; $i<1000; $i++) {
  $data[] = array('id' => 1, 'name' => 'none');
}
echo '1000 个实体元素的 $data 占用: ', memory_get_usage() - $m, PHP_EOL;
$t 占用: 360
空的 $data 占用: 496
1000 个空元素的 $data 占用: 84200
1000 个$t元素的 $data 占用: 52104
1000 个实体元素的 $data 占用: 356136这样可能清楚些

解决方案 »

  1.   

    当然那是表面现象,我是想了解下php是如何管理内存的,有没有官方的资料啥的,要不只能看php的source了?
      

  2.   

    想了解 php 是如何管理内存的,当然是看源代码最好了
    网上也有些相关文章,不多有些年头了,与现在的 php 不一定合适。毕竟 php5.3.6 起,内核一直在修改。当然速度也提升了好几个数量级不过研究他也没有多大意义
    你最多只需要知道变量是存放在一个变量表中的
      

  3.   


    /*变量的存储结构*/
    struct _zval_struct {
        zvalue_value value; /* 变量的值 */
        zend_uint refcount__gc;
        zend_uchar type;    /* 变量当前的数据类型 */
        zend_uchar is_ref__gc;
    };
    typedef struct _zval_struct zval;
     
    /*变量值的存储结构*/
    typedef union _zvalue_value {
        long lval;  /* 长整型 */
        double dval;    /* 双精度浮点型 */
        struct { /*字符型*/
            char *val;
            int len;
        } str;
        HashTable *ht;  /* 存放数组 用哈希表 (就是个指针) */
        zend_object_value obj; /*对象*/
    } zvalue_value;
      

  4.   

    php的变量是写时复制的
    看看这篇文章:http://www.laruence.com/2008/09/19/520.html