PHP memory_get_usage(false) vs memory_get_usage(true)


PHP memory_get_usage(false) vs memory_get_usage(true)

有人能澄清$real_usage参数与memory_get_usage()参数的确切区别吗?

手册规定:

将其设置为TRUE,以获取系统分配的内存的实际大小。如果未设置或FALSE,则仅报告emalloc()使用的内存。

但有什么区别呢?哪个值可与memory_limit INI设置相比较

对于一些长时间运行的脚本,我得到了大约250MB的实际使用量和50MB的emalloc使用量。这怎么可能?

我正在尝试分析一些内存泄漏问题,memory_get_usage()是我需要完全理解的一个重要指标。谢谢

实际内存是为PHP进程保留的内存量。PHP以大块的形式保留内存,这将是<=memory_limit,并且可能在脚本执行期间增加。例如,如果它填满了一个块,然后你试图分配给一个新变量,它就会保留另一个块。

如果将参数设置为FALSE,它只报告PHP在保留内存中实际使用的内存量。每当你分配给一个新的变量,或者调用一个函数等时,这个值就会增加。

如果你对实际使用的内存量感兴趣,那么你就会想要真正的内存。

如果您正在调试或试图调优一段代码,您可能会对emalloc()内存更感兴趣。这将允许您在赋值或函数调用前后检查内存,并计算增量。