Ответ
В PHP при добавлении элемента в массив, достигший своей текущей емкости (capacity), происходит переаллокация. Потребление памяти будет значительно больше одного байта.
Основные факторы:
- Структура
zval: Каждый элемент массива в PHP 7+ хранится какzval, что занимает 56 байт (на 64-битной системе). - Переаллокация массива: При превышении capacity PHP выделяет новый, больший блок памяти. Коэффициент роста обычно составляет 1.5-2 раза от текущего размера.
- Структура хэш-таблицы: Сам массив (хэш-таблица) имеет служебные структуры для управления ключами и порядком.
Пример:
// Допустим, массив из 1000 элементов занял ровно 1 МБ.
$array = range(1, 1000);
// Добавление одного элемента вызовет переаллокацию.
$array[] = 'a'; // 1 байт данных
// PHP может выделить новый блок памяти размером ~2 МБ.
Итог: Фактическое потребление памяти будет равно *новой емкости массива размер zval + служебные структуры**. Добавление 1 байта данных может привести к увеличению потребления памяти на мегабайты. Для точных цифр можно использовать memory_get_usage().