Форум программистов, компьютерный форум, киберфорум
PHP
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
57 / 48 / 5
Регистрация: 19.11.2017
Сообщений: 857

Количество памяти, выделенное скрипту

05.02.2021, 15:09. Показов 1792. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте)

На офсайте про memory_get_usage написано:

Возвращает количество памяти в байтах, которое было выделено PHP-скрипту на данный момент.
Почему в 2 этих случаях, память выделяется неодинаково? Ведь memory_get_usage(); вызывается в самом начале скрипта. Как и почему последующий код влияет на функцию, которая выполняется вначале?

PHP
1
2
3
4
5
6
<?php
 
$a=memory_get_usage(); 
echo $a."<br>"; // выводит 354816
 
?>
PHP
1
2
3
4
5
6
<?php
 
$a=memory_get_usage(); 
echo $a; // выводит 354728
 
?>
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.02.2021, 15:09
Ответы с готовыми решениями:

Максимальный объём памяти разрешеный использовать скрипту на хостинге?
1. Как спомощью php узнать максимальный объём памяти в байтах, который разрешается использовать скрипту на хостинге? echo...

Какое количество адресов содержатся в памяти компьютера, как выделяется разное количество памяти под переменную?
Значит распишу смысл вопроса. Мы создаём переменную например типа int или любого другого. Каждая переменная имеет адрес где храниться...

Написать программу, определяющую количество байтов памяти с ненулевыми значениями для первых 256 Кб физической памяти в реальном режиме работы Intel 8
Доброе время суток, моя задача похоже на задачу из этой темы https://www.cyberforum.ru/assembler/thread762097.html. Но обладаю такими же...

11
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
05.02.2021, 16:28
Скорее всего память на "<br>" уже была выделена, еще до выполнения скрипта. Точнее чтоб сказать, нужно конкретно знать как именно работает интерпретатор
1
1 / 1 / 0
Регистрация: 10.12.2020
Сообщений: 12
05.02.2021, 17:15
Цитата Сообщение от mikello Посмотреть сообщение
Почему в 2 этих случаях, память выделяется неодинаково?
Как вы, вероятно, знаете, PHP – это интерпретируемый язык. Это означает, что PHP-скрипт переводится в машинный код во время выполнения. Когда вы отправляете запрос на сервер, работающий на PHP, он возьмет эти простые .php файлы и проанализирует текст в них до того, как процессор сможет их выполнить.

таким образом память выделяемая под скрипт скорее всего берётся от того что указано в пределах <?php ?>, то есть скрипта.

Очевидно, что существуют механизмы кэширования, которые оптимизируют это, поэтому приведенное выше утверждение является чрезмерным упрощением. Однако этого достаточно, чтобы понять суть
0
321 / 189 / 78
Регистрация: 04.10.2016
Сообщений: 809
05.02.2021, 18:00
Цитата Сообщение от Levaz Посмотреть сообщение
таким образом память выделяемая под скрипт скорее всего берётся от того что указано в пределах <?php ?>, то есть скрипта.
не так

Цитата Сообщение от mikello Посмотреть сообщение
Как и почему последующий код влияет на функцию, которая выполняется вначале?
запускает процедуру отслеживания потребление памяти в скрипте, те по результатам видно, что от начала запуска до смерти скрипта, в том числе то, что за пределами php тега. поэтому без разницы где ты эту функцию запускаешь.
1
1 / 1 / 0
Регистрация: 10.12.2020
Сообщений: 12
05.02.2021, 18:04
Цитата Сообщение от Fart83 Посмотреть сообщение
не так
Цитата Сообщение от Fart83 Посмотреть сообщение
запускает процедуру отслеживания потребление памяти в скрипте, те по результатам видно, что от начала запуска до смерти скрипта, в том числе то, что за пределами php тега. поэтому без разницы где ты эту функцию запускаешь.
усё понял)) , был не прав.
0
57 / 48 / 5
Регистрация: 19.11.2017
Сообщений: 857
05.02.2021, 20:00  [ТС]
Fart83,

поэтому без разницы где ты эту функцию запускаешь.
Ок. Если запустить функцию в середине? По какому принципу в этом случае будет работать и из каких соображений высчитывается (для функции в середине)?

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
 
echo memory_get_usage() . "\n";
 
$a = str_repeat("Hello", 4242);
 
echo memory_get_usage() . "\n"; 
 
unset($a);
 
echo memory_get_usage() . "\n"; 
 
?>
0
321 / 189 / 78
Регистрация: 04.10.2016
Сообщений: 809
06.02.2021, 02:48
Если запустить функцию в середине?
Некорректный вопрос в контексте кода.
Тут только догадываться о чём именно идёт речь. Но попытаюсь.

По какому принципу в этом случае будет работать и из каких соображений высчитывается (для функции в середине)?
Если идёт речь про 7 строчку - это попытка повторно вызвать процедуру получения
памяти (соответственно интерпретатор это и сделает), но
как я знаю, интерпретатор реализует сбор памяти только до 2-3 попыток максимум
для предотвращение неких сложностей в архитектуре.
Так как повторный вызов особой роли не играет, то и вызывать повторно
я лично нужды не вижу. Разница в памяти будет колебаться примерно
32байта (опять таки особенности ядра) + сама процедура.
А в противном случае результаты будут
идентичны.

Там ещё есть real use - но там немного другая история.

Добавлено через 4 минуты
Тут ещё не учтен размер памяти полученный извне скрипта, но думаю суть одна.
0
57 / 48 / 5
Регистрация: 19.11.2017
Сообщений: 857
06.02.2021, 09:12  [ТС]
Fart83,

Если идёт речь про 7 строчку - это попытка повторно вызвать процедуру получения
памяти (соответственно интерпретатор это и сделает), но
как я знаю, интерпретатор реализует сбор памяти только до 2-3 попыток максимум
для предотвращение неких сложностей в архитектуре.
Так как повторный вызов особой роли не играет, то и вызывать повторно
я лично нужды не вижу. Разница в памяти будет колебаться примерно
32байта (опять таки особенности ядра) + сама процедура.
А в противном случае результаты будут
идентичны.
Я пробовал вызывать больше 3 раз эту функцию в коде и всегда разные были результаты. А вот этот код дал следующие результаты:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
 
echo memory_get_usage() . "\n";    // 355696
 
$a = str_repeat("Hello", 4242);
 
echo memory_get_usage() . "\n";  // 380272
 
unset($a);
 
echo memory_get_usage() . "\n"; //355696
 
?>
Добавлено через 8 минут
И в сравнении вот с этим кодом (слишком большой разброс в значениях получается):

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
 
echo memory_get_usage() . "\n";    // 355712
 
$a = str_repeat("Hello", 424);
 
echo memory_get_usage() . "\n";  // 358272
 
unset($a);
 
echo memory_get_usage() . "\n"; //355712
 
?>
0
321 / 189 / 78
Регистрация: 04.10.2016
Сообщений: 809
06.02.2021, 17:07
Цитата Сообщение от mikello Посмотреть сообщение
И в сравнении вот с этим кодом (слишком большой разброс в значениях получается):
разброс не такой большой.

Цитата Сообщение от mikello Посмотреть сообщение
Я пробовал вызывать больше 3 раз эту функцию в коде и всегда разные были результаты. А вот этот код дал следующие результаты:
здесь я думаю речь идет о версии ниже php7.4 или о настройках интерпретатора
и как именно реализует разработчик задачи внутри ядра я браться не буду, но
вот к примеру один и тот же код, лично у меня, на:

7.0 - 342760 345432 342872 345432 345432 347992
7.4 - 351784 351896 351896 351896 351896 351896

как видно 3 раза достаточно для полноценной картины в последнем при вызове 6 раз.

Добавлено через 1 минуту
Цитата Сообщение от mikello Посмотреть сообщение
всегда разные были результаты
по сути так и должно быть
0
57 / 48 / 5
Регистрация: 19.11.2017
Сообщений: 857
07.02.2021, 09:01  [ТС]
Fart83,

по сути так и должно быть
Ок. Запустил 2 следующих кода, и почему-то память выделяется на "hello123" по-разному, хотя по идее должно всегда по 8 байт выделяться. Почему так происходит?

PHP
1
2
3
4
5
<?php
$a="hello123hello123hello123hello123hello123"; // выделяется по 16 байт на каждый "hello123";
 
echo memory_get_usage();
?>
PHP
1
2
3
4
5
<?php
$a="hello123hello123hello123hello123hello123hello123"; // начиная с 6-ой подстроки "hello123" выделяется по 32 байт на каждый последующий hello123; Если продолжать, то выделяется с 11-ой подстроки на "hello123" 64 байта... и т.д.
 
echo memory_get_usage();
?>
Добавлено через 24 минуты
Что самое интересное, если писать $a=str_repeat("hello123", 1); то выделяется как раз 8 байт на подстроку, но $a=str_repeat("hello123", 6); выделяет уже 16 байт, начиная с 6 подстроки , затем 32 байта и т.д.
0
321 / 189 / 78
Регистрация: 04.10.2016
Сообщений: 809
07.02.2021, 09:30
Цитата Сообщение от mikello Посмотреть сообщение
по идее должно всегда по 8 байт выделяться. Почему так происходит?
происходит именно так, как заложено в ядре и это может меняться из версии к версии.
в скрипте PHP искать такого рода ответы - бессмысленно. у PHP нет возможности управлять памятью.
0
57 / 48 / 5
Регистрация: 19.11.2017
Сообщений: 857
07.02.2021, 09:40  [ТС]
Fart83,

происходит именно так, как заложено в ядре и это может меняться из версии к версии.
Я могу ошибаться, но ведь правильнее было бы выделять по 8 байт на 8 символов в любом случае? Иначе памяти больше расходуется (судя по коду, приведенному выше).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.02.2021, 09:40
Помогаю со студенческими работами здесь

Найти выделенное
Всем привет! Есть такая опция, которая при замене позволяет выделить текст: Options.DefaultHighlightColorIndex = wdRed Мне...

Как изменить выделенное
как изменить выделенное на &quot;Оставить комментарии&quot; &lt;?php /** * The template for displaying comments. * * The area of the page...

Выделенное поле Textarea
Скачал модуль для дле fast pm, решил добавить в него бб коды но наткнулся что не как не могу заставить их вставляться в textarea. По идее...

Treeview получить выделенное значение
Доброе время суток. Подскажите как получить результат выбранного checkbox в treeview.(Т.е выделил пункт сообщение:Выбран пункт такой-то) ...

Как обработать выделенное слово в C#?
У меня возникли проблемы с обработкой текста в TextBox. Есть текст, нужно выделить одно слово и перевести его на англ язык. Как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru