Как разобраться с памятью в PHP?

Есть код:
echo memory_get_usage();
$a = 'a';
echo memory_get_usage();

Запуск из веб:
217360
217496
(разница 136)

Запуск из консоли
221376
221560
(разница 136)

echo memory_get_usage();
$a = 'a';
$b = 'b';
echo memory_get_usage();

217360
217632
(разница 272 = 136*2)

Но запуск с переменной $a = 'abcdefghjklmnopqr'; опять даёт разницу 136

Функция выводит:
Возвращает количество памяти в байтах, которое было выделено PHP-скрипту на данный момент.


Вопросы:
1) 217360 это на весь поток апача выделилось?
2) 136 байт по 8 бит в каждом, хотя у меня не мультибайтовая кодировка вроде где 1 символ = несколько байт. Откуда 136-то берётся?
3) Почему в третьем случае где много букв опять 136? Там 17 символов уже вроде третий байт пойти должен по памяти...
  • Вопрос задан
  • 806 просмотров
Решения вопроса 2
AlexMcArrow
@AlexMcArrow
Люблю РНР, да я такой!
1) на запущенный процесс РНР
2) Память выделается блоками (с запасом), так как РНР не строготипизированный язык, и данная переменная может (неожиданно) стать булиневой или вобще массивом
3) С большей вероятностью увеличение (которое вы наблюдаете) это не резервирование блока памяти для данных, а занимаемая память для ссылки на блок памяти (в которой и хранятся данные), и возможно под сами данные память используется из уже зарезервированной области
Ответ написан
@galliard
Помимо самого значения php хранит ещё много служебной информации, например имя переменной, её тип, область видимости, количество переменных с тем же значением, etc.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы