2

我决定查看为我的几个 PHP 脚本分配了多少内存,发现它达到了大约 130KiB 的峰值。不错,我想,考虑到剧本中发生的事情。

然后,我决定看看剧本是从什么开始的。我预计大约 32KiB。

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

<?php 
echo memory_get_usage();

它也以分配的相同数量的内存开始。

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

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

这是否可以在每个脚本的基础上进行配置,PHP 如何确定它将为每个脚本分配多少?

使用 PHP 版本 5.4.7

谢谢。

4

1 回答 1

5

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

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

如果您确实调用memory_get_usage(true),您将取回分配器从系统中保留的堆大小,其中包括您的代码实际未使用但可直接供您的代码使用的内存。

当您的脚本需要比分配器可用的内存更多的内存时,后者将从操作系统中保留另一个大块,您会看到memory_get_usage(true)急剧上升,而memory_get_usage()可能只会增加几个字节。

分配器用于决定何时分配多少内存以及分配多少内存的确切策略在编译时被纳入 PHP;您必须编辑源代码并编译 PHP 才能更改此行为。

于 2013-01-10T14:54:50.740 回答