Как разобраться с памятью в 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 символов уже вроде третий байт пойти должен по памяти...
  • Вопрос задан
  • 803 просмотра
Решения вопроса 2
AlexMcArrow
@AlexMcArrow
Люблю РНР, да я такой!
1) на запущенный процесс РНР
2) Память выделается блоками (с запасом), так как РНР не строготипизированный язык, и данная переменная может (неожиданно) стать булиневой или вобще массивом
3) С большей вероятностью увеличение (которое вы наблюдаете) это не резервирование блока памяти для данных, а занимаемая память для ссылки на блок памяти (в которой и хранятся данные), и возможно под сами данные память используется из уже зарезервированной области
Ответ написан
@galliard
Помимо самого значения php хранит ещё много служебной информации, например имя переменной, её тип, область видимости, количество переменных с тем же значением, etc.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
25 апр. 2024, в 14:44
10000 руб./за проект
25 апр. 2024, в 14:44
250 руб./в час