浅谈PHP内存分配管理机制
来源:互联网 发布:学英语的软件 编辑:程序博客网 时间:2024/06/05 00:44
下面先看一下内存的一些变化过程:
为什么,unset释放内存后,与第一次输出的不一样呢。其实是输出函数占用了部分内存。
下面我们在看下:
这样内存就相同了。。
PHP的unset确实会释放内存(当然, 还要结合引用和计数), 但这个释放不是C编程意义上的释放, 不是交回给OS。对于PHP来说, 它自身提供了一套和C语言对内存分配相似的内存管理API。
这些API和C的API意义对应, 在PHP内部都是通过这些API来管理内存的。
当我们调用emalloc申请内存的时候,PHP并不是简单的向OS要内存,而是会像OS要一个大块的内存,然后把其中的一块分配给申请者, 这样当再有逻辑来申请内存的时候,就不再需要向OS申请内存了,避免了频繁的系统调用。
eg:
同样的, 在我们调用efree释放内存的时候, PHP也不会把内存还给OS,,而会把这块内存,,归入自己维护的空闲内存列表.,而对于小块内存来说,,更可能的是, 把它放到内存缓存列表中去。
关于数组的内存分配:
Hashtable是PHP的核心结构,数组也是用它来表示的,而符号表也是一种关联数组, 对于如下代码:
我们定义了100个变量, 然后又Unset了他们,,来看看输出:
这是因为对于Hashtable来说,定义它的时候,不可能一次性分配足够多的内存块,来保存未知个数的元素,,所以PHP会在初始化的时候, 只是分配一小部分内存块给HashTable,,当不够用的时候再RESIZE扩容。
而Hashtable, 只能扩容,不会减少,对于上面的例子,当我们存入100个变量的时候, 符号表不够用了,做了一次扩容, 而当我们依次unset掉这100个变量以后,变量占用的内存是释放了(334172– 325752),但是符号表并没有缩小,所以这些少的内存是被符号表本身占去了....
0 0
- 浅谈PHP内存分配管理机制
- 浅谈Linux内存管理机制
- 浅谈Linux内存管理机制
- 浅谈Linux内存管理机制
- 浅谈linux内存管理机制
- 浅谈Linux内存管理机制
- 浅谈Linux内存管理机制
- 浅谈Linux内存管理机制
- 浅谈Linux内存管理机制
- 浅谈Linux内存管理机制
- 浅谈Linux内存管理机制
- 浅谈OC内存管理机制
- 浅谈Linux内存管理机制
- 浅谈Linux内存管理机制
- 浅谈Linux内存管理机制
- 浅谈Linux内存管理机制
- 浅谈Linux内存管理机制
- 浅谈Linux内存管理机制
- jquery用户名动态验证(jquery+mysql)
- 再一次,为平凡人喝彩!
- 总结下MySQL存储引擎的区别和性能优化的一些方法
- MemCache在php中的一些应用和使用方法的小测试
- 基于PHP的curl的知识小结
- 浅谈PHP内存分配管理机制
- Python的一些学习笔记
- 关于mongodb Error: couldn\'t connect to server 127.0.0.1 shell/mongo.js:84
- CentOS Linux,Fedora Linux 安装MongoDB
- NSEnumerator 学习
- Ubuntu13.04下web Servier(Apache+MySQL+PHP)的搭建
- 关于初次配置或者使用svn的一些常见问题
- Ubuntu13.04安装google-chrome-stable
- Ubuntu12.04安装Sublime Text 2