ホームページ  >  記事  >  バックエンド開発  >  关于php中数组跟内存的管理

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

WBOY
WBOYオリジナル
2016-06-13 11:53:29733ブラウズ

关于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
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。