real_usage
这样工作:
Zend的内存管理器不会为每个需要的块使用系统malloc。相反,它分配了一大块系统内存(以256K为增量,可以通过设置环境变量进行更改ZEND_MM_SEG_SIZE
)并在内部进行管理。因此,有两种内存使用情况:
可以通过返回其中之一memory_get_usage()
。哪种对您更有用取决于您要寻找的内容。如果您要优化特定部分的代码,则“内部”对您可能更有用。如果您要全局跟踪内存使用情况,则“实际”将更有用。memory_limit
限制“实数”,因此一旦限制所允许的所有块都从系统中取出,并且内存管理器无法分配请求的块,分配就会失败。请注意,在这种情况下,“内部”使用量可能小于限制,但是由于碎片,分配仍然可能失败。
另外,如果您使用某些外部内存跟踪工具,则可以设置此环境变量USE_ZEND_ALLOC=0
,该变量将禁用上述机制并使引擎始终使用malloc()
。这会带来更差的性能,但允许您使用malloc跟踪工具。