Nikolino
@Nikolino

Как происходит выделение памяти?

Всегда считал, что при создании новой переменной выделение памяти должно расти, но этот код:

echo memory_get_usage()."\n";
$a = "Иванов";
echo memory_get_usage()."\n";
$b = "Петров";
echo memory_get_usage()."\n";
$c = "Сидоров";
echo memory_get_usage()."\n";
$test = range(1, 1024);
echo memory_get_usage()."\n";


показывает такие результаты:
355512
355544
355544
355544
392464

Почему выделение памяти не увеличивается после создания каждой переменной со строкой? А после создания массива увеличивается?
Ожидал увидеть что-то вроде:
355512
355544
355913
356321
392464
  • Вопрос задан
  • 238 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Память выделяется блоками с некоторым минимальным размером. При создании переменной $a было выделено 32 байта. В сумме переменные $a, $b и $c занимают 22 байта, с выравниванием - 24 байта. Соответственно, дополнительной памяти под них не требовалось.
При создании массива память была запрошена, скорее всего, не только под сам массив, но и для подгрузки функции range.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Память запрашивается когда ее становится мало, и с некоторым запасом, чтобы не просить ее при каждой операции, это добавляло бы тормоза.

Изначально ее выделяется с запасом, часто даже скрипт отрабатывает и ни разу не увеличивает память под себя, а так можете попробовать memory_get_usage(1) там вообще будет стабильно 2 мегабайта, если что-то жрущее не запустить, то скрипт не запросит даже памяти себе еще.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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