Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про PHP: memory, model

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

Этот вопрос проверяет понимание того, как PHP управляет памятью и почему язык кажется «простым», хотя внутри использует сложный механизм работы с zval-структурами.

Короткий ответ

PHP хранит данные в zval-структурах, которые содержат значение и счётчик ссылок. Каждый раз, когда переменная копируется, увеличивается счётчик ссылок, а само значение не дублируется. Когда счётчик ссылок достигает нуля, значение удаляется из памяти. Такая модель снижает расход памяти и делает язык эффективным, несмотря на его высокоуровневость. Основная идея — PHP сам освобождает память, и разработчику не нужно управлять ею вручную.

Длинный ответ

Как PHP управляет памятью

Работа с памятью в PHP основана на zval — внутренней структуре, которая содержит данные и служебную информацию.

Определение: zval — это контейнер для значения, который включает тип, само значение и счётчик ссылок.

1. Структура zval

Каждая переменная — это ссылка на zval, внутри которого находятся:

  • тип данных

  • указатель на конкретное значение

  • счётчик ссылок (refcount)

  • флаг "разделяемости" (is_ref)

Это позволяет PHP эффективно копировать и удалять данные.

2. Подсчёт ссылок

Когда переменная копируется ($b = $a), PHP не дублирует само значение — только увеличивает refcount.
Когда переменная уничтожается или выходит из области видимости — refcount уменьшается.
Удаление из памяти происходит только при достижении 0.

3. Copy-On-Write

Копирование фактически происходит только при изменении данных. Это позволяет экономить память.

Пример

php

$a = [1, 2, 3];
$b = $a;       // значение общее
$b[] = 4;      // теперь $b копируется

4. Сборщик мусора

Помимо refcount существует GC, который устраняет циклические ссылки — ситуации, когда объекты ссылаются друг на друга.

5. Вывод

Модель памяти PHP проста в использовании, но достаточно оптимизирована. Она подходит для веб-приложений, где важны скорость разработки и умеренная производительность.

  • Аватар

    PHP Guru

    Mikhail Savin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    5

  • Сложность:

    6

Навыки

  • PHP

    PHP

Ключевые слова

#memory

#model

Подпишись на PHP Developer в телеграм

  • Аватар

    PHP Guru

    Mikhail Savin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.