14

有人可以澄清$real_usage参数的确切区别是memory_get_usage()什么吗?

手册指出:

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

但是有什么区别呢? 哪个值与memory_limitINI 设置相当?

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

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

4

1 回答 1

8

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

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

如果您对实际使用的内存量感兴趣,那么您将需要真正的内存。

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

于 2013-07-10T09:57:59.010 回答