PHP memory_get_usage (false) vs memory_get_usage (true)

Может кто-нибудь уточнить, какая именно разница в параметре $real_usage для memory_get_usage()?

В руководстве указано:

Установите для этого значение ИСТИНА, чтобы получить реальный размер памяти, выделенной из системы. Если не задано или FALSE, сообщается только память, используемая emalloc().

Но какая разница? Какое значение сравнимо с настройкой memory_limit INI?

Для некоторых длинных скриптов я получаю что-то вроде 250 МБ реального использования и всего лишь 50 Мб использования emalloc. Как это возможно?

Я пытаюсь проанализировать некоторые проблемы с утечкой памяти, а memory_get_usage() - важный показатель для меня, который мне нужно полностью понять. Спасибо.

Ответы

Ответ 1

Реальная память - это объем памяти, зарезервированный для процесса PHP. PHP резервирует память в больших кусках, и это будет <= memory_limit и может увеличиться во время выполнения script. Например. Если он заполняет кусок, и затем вы пытаетесь назначить новую переменную, он зарезервирует еще один фрагмент.

Если вы установили параметр в FALSE, он сообщает только объем памяти, который PHP фактически использует в зарезервированной памяти. Это будет увеличиваться каждый раз, когда вы назначаете новую переменную, или вызываете функцию и т.д.

Если вам интересен объем используемой памяти, тогда вам понадобится реальная память.

Если вы отлаживаете или пытаетесь настроить фрагмент кода, вы, вероятно, больше интересуетесь памятью emalloc(). Это позволит вам проверять память до и после вызова назначения или функции и вычислять дельта.