Rumah  >  Artikel  >  pembangunan bahagian belakang  >  关于php中数组跟内存的管理

关于php中数组跟内存的管理

WBOY
WBOYasal
2016-06-13 11:53:29678semak imbas

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




------解决方案--------------------
不是很清楚你的目标是什么?

m = 0;<br />$m = memory_get_usage();<br />$t = array('id' => 1, 'name' => 'none');<br />echo '$t 占用: ', memory_get_usage() - $m, PHP_EOL;<br />$data = array();<br />echo '空的 $data 占用: ', memory_get_usage() - $m, PHP_EOL;<br />$m = memory_get_usage();<br />for($i=0; $i<1000; $i++) {<br />  $data[] = null;<br />}<br />echo '1000 个空元素的 $data 占用: ', memory_get_usage() - $m, PHP_EOL;<br />$data = array();<br />$m = memory_get_usage();<br />for($i=0; $i<1000; $i++) {<br />  $data[] = $t;<br />}<br />echo '1000 个$t元素的 $data 占用: ', memory_get_usage() - $m, PHP_EOL;<br />$data = array();<br />$m = memory_get_usage();<br />for($i=0; $i<1000; $i++) {<br />  $data[] = array('id' => 1, 'name' => 'none');<br />}<br />echo '1000 个实体元素的 $data 占用: ', memory_get_usage() - $m, PHP_EOL;<br />
$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
Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn