首页 / PHP / 关于php中数组和内存的管理
关于php中数组和内存的管理
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了关于php中数组和内存的管理,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2269字,纯文字阅读大概需要4分钟。
内容图文
![关于php中数组和内存的管理](/upload/InfoBanner/zyjiaocheng/199/97b1899f0cbb4c6cb71b323cd6a33117.jpg)
但是看下面的测试,不知道是因为测试方法有问题,还是说如果没有用&按引用传递的时候还是共享同一部分内存,但是在改变它的元素以后才真正生成了一份副本出来?
回复讨论(解决方案)
不是很清楚你的目标是什么?
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 是如何管理内存的,当然是看源代码最好了
网上也有些相关文章,不多有些年头了,与现在的 php 不一定合适。毕竟 php5.3.6 起,内核一直在修改。当然速度也提升了好几个数量级
不过研究他也没有多大意义
你最多只需要知道变量是存放在一个变量表中的
当然那是表面现象,我是想了解下php是如何管理内存的,有没有官方的资料啥的,要不只能看php的source了?
哈希表
/*变量的存储结构*/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;
php的变量是写时复制的
看看这篇文章:http://www.laruence.com/2008/09/19/520.html
内容总结
以上是互联网集市为您收集整理的关于php中数组和内存的管理全部内容,希望文章能够帮你解决关于php中数组和内存的管理所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。