Я разрабатываю сценарий командной строки, который выполняется в бесконечном цикле. Через некоторое время это вызывает ошибку сегментации, которая, я думаю, вызвана утечками памяти. Я думаю, что я прав, потому что после просмотра результатов, полученных с помощью команды ps
, похоже, что память, используемая сценарием, постоянно увеличивается, прежде чем сценарий падает.
Я нашел эту статью , в которой говорится, что одной из возможных причин утечек памяти в командной строке php является использование циклов foreach
, которые создают копии массивов, которые никогда не сбрасываются. После некоторых исследований это выглядит так. Поэтому я решил заменить все циклы foreach
их for
эквивалентами.
Первый вопрос - правильны ли мои рассуждения?
Второй - что делать, если у меня есть ассоциативный массив для повторения, и я хотел бы знать текущий ключ?
Один из способов, который я могу придумать, - использовать array_walk()
, другой - использовать комбинацию функций next()
и key()
в цикле for
. Какой подход не оставит меня с утечками памяти?
Я выполню некоторые тесты и опубликую результаты после того, как я закончу.
Вторичная проблема заключается в том, как обращаться с итерируемыми объектами, но это на потом.
РЕДАКТИРОВАТЬ 1 : результаты моих тестов несколько отличаются, поэтому я опубликую что-то новое после некоторых исследований.