关于php内存的分配。
时间:2011-12-22
来源:互联网
$t = memory_get_usage();
// 3125000
$i = 1;
$a[$i] = $i;
$i = 1111111111;
$a[$i] = $i;
$i = '1';
$a[$i] = $i;
$i = '111111111111111111111111111';
$a[$i] = $i;
echo memory_get_usage()-$t;
?>
请问如何计算出各个占用了多少内存的。谢谢各位拉。
作者: ci1699 发布时间: 2011-12-22
ci1699 提的问题 都是好问题
作者: xiachao2008 发布时间: 2011-12-22
最好的方法是查看源码中是如何构造变量表的
作者: xuzuning 发布时间: 2011-12-22
像字符串的那个,111111111111111111111111111的比上面1用的内存多。
不知为何。就不知道php是怎么分配的啊。
逐次输出、观察
最好的方法是查看源码中是如何构造变量表的
作者: ci1699 发布时间: 2011-12-22
作者: ci1699 发布时间: 2011-12-22
这种问题你要参考laruence大牛怎么说的。
http://www.laruence.com/2011/03/04/1894.html
http://www.laruence.com/2011/11/09/2277.html
作者: foolbirdflyfirst 发布时间: 2011-12-22
php是基于c的,内存管理是不面向php的。
这种问题你要参考laruence大牛怎么说的。
http://www.laruence.com/2011/03/04/1894.html
http://www.laruence.com/2011/11/09/2277.html
不可能得到实质性帮助
作者: xuzuning 发布时间: 2011-12-22
本质上,php有自己的内存管理机制,这样的需求就要求申请的时候,需要更大块内存
然后有一套自己应对内存管理结构,减少系统调用次数
作者: amani11 发布时间: 2011-12-22
引用 5 楼 foolbirdflyfirst 的回复:
php是基于c的,内存管理是不面向php的。
这种问题你要参考laruence大牛怎么说的。
http://www.laruence.com/2011/03/04/1894.html
http://www.laruence.com/2011/11/09/2277.html
说实在的,那些文章说的云山雾罩,点到为止。
……
不同意,laruence的文章衍伸出去有许多知识点。
当我们调用emalloc申请内存的时候, PHP并不是简单的向OS要内存, 而是会像OS要一个大块的内存, 然后把其中的一块分配给申请者, 这样当再有逻辑来申请内存的时候, 就不再需要向OS申请内存了, 避免了频繁的系统调用.
==================================================================================
光这句话就说明很多问题了。系统调用还是个专业词,得理解什么是系统调用,进程的用户态,内核态。为什么频繁的系统调用需要避免。
同样的, 在我们调用efree释放内存的时候, PHP也不会把内存还给OS, 而会把这块内存, 归入自己维护的空闲内存列表. 而对于小块内存来说, 更可能的是, 把它放到内存缓存列表中去(后记, 某些版本的PHP, 比如我验证过的PHP5.2.4, 5.2.6, 5.2.8, 在调用get_memory_usage()的时候, 不会减去内存缓存列表中的可用内存块大小, 导致看起来, unset以后内存不变, 见评论).
===============================================================================
memory_get_usage()并不能真实得到内存分配量。
我当初看这些东西也是云山雾罩的,多晕几次就慢慢懂点东西了。
作者: foolbirdflyfirst 发布时间: 2011-12-22
而 php 的变量应该是一个结构队列,每个每一项都应至少包括:变量名称、类型、值指针、是否是引用....
这才是我们需要关心的,而他是如何维护这张表的。却不是很重要
作者: xuzuning 发布时间: 2011-12-22
我指的不是如何去申请内存的问题,而是他没有说明 php 是如何维护变量表的。
而 php 的变量应该是一个结构队列,每个每一项都应至少包括:变量名称、类型、值指针、是否是引用....
这才是我们需要关心的,而他是如何维护这张表的。却不是很重要
了解了,关于变量下面两篇laruence文章有提到,特别是第二篇,个人觉得很好,真心建议坛友们多看看,估计很多人都看过了,挺出名的,再结合php官方那篇垃圾回收机制的文章,效果更好。
变量存储
http://www.laruence.com/2008/08/22/412.html
变量分离引用
http://www.laruence.com/2008/09/19/520.html
laruence现在已经是php开发组成员了,说不定以后某个版本的php的某个特性就是他实现的,他说的东西还是比较权威的。
作者: foolbirdflyfirst 发布时间: 2011-12-22
sina云什么有时候真慢。大半天打不开。
我还在折腾那排序。昨晚又搞到3点多=_=
想用php位图来排序,但耗太大内存。
现在想方法优化。晚点再贴代码上来。
作者: ci1699 发布时间: 2011-12-22
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28