内存管理- PHP memory_get_usage()在空PHP脚本上


memory management - PHP memory_get_usage() on empty PHP script

我决定查看一下分配给我的几个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才能更改此行为。