日期:2014-05-16  浏览次数:20486 次

关于php中数组和内存的管理
按手册上说的,php除了object外,其他类型的变量在赋值、参数传递、返回值中得到都是它的副本
但是看下面的测试,不知道是因为测试方法有问题,还是说如果没有用&按引用传递的时候还是共享同一部分内存,但是在改变它的元素以后才真正生成了一份副本出来?




------解决方案--------------------
不是很清楚你的目标是什么?
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

这样可能清楚些
------解决方案--------------------
引用:
当然那是表面现象,我是想了解下php是如何管理内存的,有没有官方的资料啥的,要不只能看php的source了?


哈希表
------解决方案--------------------
php的变量是写时复制的
看看这篇文章:http://www.laruence.com/2008/09/19/520.html