我决定查看一下分配给我的几个PHP脚本的内存大小,并发现它的峰值约为130KiB。考虑到剧本的情节,我想还不错。
然后,我决定看看剧本是怎么开始的。我预计是32kb左右。
我得到了121952字节。在那之后,我试着测试一个完全没有的脚本:
<?php
echo memory_get_usage();
它也以相同的内存分配量开始。
现在,很明显,PHP会在脚本运行之前分配一些内存,但这似乎有点多。
然而,根据系统当时可用的内存大小,它似乎根本不是动态的。我试图通过打开其他进程来消耗更多的系统内存,但是预分配的内存量保持相同的字节数。
这在每个脚本的基础上是可配置的吗? PHP如何确定它将分配多少给每个脚本?
使用PHP Version 5.4.7
谢谢。
memory_get_usage
函数直接查询PHP的内存分配器来获取这些信息。它报告PHP本身使用了多少内存,而不是整个进程甚至整个系统使用了多少内存。
如果你不传递额外的true
参数,你得到的是你的代码使用的确切内存量;这永远不会超过memory_get_usage(true)
报告的内容。
如果您调用memory_get_usage(true)
,您将获得分配器从系统中保留的堆大小,其中包括您的代码实际上没有使用但可直接用于您的代码的内存。
当您的脚本需要比分配程序可用的内存更多的内存时,后者将从操作系统中预留另一个大块,您将看到memory_get_usage(true)
急剧上升,而memory_get_usage()
可能只增加几个字节。
分配器决定何时以及分配多少内存的确切策略在编译时被写入PHP;您必须编辑源代码并编译PHP才能更改此行为。