空的PHP脚本上的PHP memory_get_usage()

时间:2013-01-10 14:46:47

标签: php memory-management

我决定看一下我的一些PHP脚本分配了多少内存,并发现它的峰值大约为130KiB。考虑到剧本中发生了什么,我想,还不错。

然后,我决定看看脚本的起源。我期待32KiB左右。

我得到121952字节。之后,我尝试测试一个完全缺乏的脚本:

<?php 
echo memory_get_usage();

它也从分配的内存量开始。

现在,显然,PHP会在脚本运行之前为脚本分配一些内存,但这似乎有些过分。

但是,根据当时系统可用的内存量,它似乎根本不是动态的。我尝试通过打开其他进程来消耗更多系统内存,但预先分配的内存量保持相同的确切字节数。

这完全可以基于每个脚本进行配置,PHP如何确定它将分配给每个脚本的数量?

  

使用PHP版本5.4.7

感谢。

1 个答案:

答案 0 :(得分:4)

memory_get_usage函数直接查询PHP的内存分配器以获取此信息。它报告了PHP本身使用了多少内存,而不是整个过程甚至整个系统使用了多少内存。

如果你没有传递一个额外的true参数,你得到的是你的代码使用的确切内存量;这永远不会超过memory_get_usage(true)报告的内容。

如果你调用memory_get_usage(true),你将获得分配器从系统保留的堆的大小,其中包括代码实际未使用但可直接用于代码的内存。 / p>

当你的脚本需要的内存超过分配器已有的内存时,后者将保留操作系统中的另一个大块,你会看到memory_get_usage(true)急剧跳跃,而memory_get_usage()可能只会增加几个字节。

分配器用于确定何时以及分配多少内存的确切策略在编译时被烘焙到PHP中;你必须编辑源代码并编译PHP来改变这种行为。