cru*_*ush 2 php memory-management
我决定查看一下分配给我的一些 PHP 脚本的内存量,发现其峰值约为 130KiB。考虑到剧本中发生的事情,我想,还不错。
然后,我决定看看剧本是从什么开始的。我预计大约 32KiB。
我得到了 121952 字节。之后,我尝试测试一个完全没有的脚本:
<?php
echo memory_get_usage();
Run Code Online (Sandbox Code Playgroud)
它也以分配相同数量的内存开始。
现在,显然,PHP 将在脚本运行之前为其分配一些内存,但这似乎有点过多。
然而,根据当时系统可用的内存量,它似乎根本不是动态的。我尝试通过打开其他进程来消耗更多的系统内存,但预分配的内存量保持相同的字节数。
这是否可以在每个脚本的基础上进行配置,PHP 如何确定它将分配给每个脚本的量?
使用 PHP 版本 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 才能更改此行为。