Zig Academy · Урок

Почему в Zig нет скрытых выделений памяти

Выделение памяти всегда передаётся явно.

Урок 1 из 413 шагов

«Почему в Zig нет скрытых выделений памяти» — бесплатный урок Zig Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Zig Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Zig Academy содержит 4 уроков всего.

Память выделяется явно

В Zig ни одна функция стандартной библиотеки незаметно не получает память в куче. Если коду нужно выделить память, он должен явно это указать. 📦

Вы передаёте Allocator

Любой код, который выделяет память, принимает Allocator как параметр. Память не может появиться, пока Вы не передадите функции инструмент для её создания.

fn buildList(allocator: std.mem.Allocator) !void {}

Нет скрытого ключевого слова new

В Zig нет оператора new и сборщика мусора. Ничто не обращается к куче за Вашей спиной, как это происходит во многих языках.

Почему это важно

Поскольку выделение памяти видно явно, Вы всегда знаете, откуда она поступает. Это особенно важно для встраиваемых микросхем, ядер и игровых циклов с жёсткими ограничениями.

Читайте сигнатуру

Функция, которая может выделять память, показывает это в своей сигнатуре: она принимает Allocator и обычно возвращает объединение ошибки с !.

fn dupe(a: std.mem.Allocator, s: []const u8) ![]u8 {}

Стек бесплатен

Обычные локальные значения находятся в стеке и не требуют Allocator. Он нужен только когда значение должно пережить функцию или увеличиваться во время выполнения.

var x: i32 = 5; // stack, no allocation

Выделение памяти может завершиться ошибкой

Запрос памяти в куче может завершиться ошибкой, поэтому функции выделения возвращают ошибку. Вы должны обработать возможный OutOfMemory и никогда не игнорировать его.

Вам принадлежит созданное Вами

Тот, кто вызывает Allocator, владеет результатом и должен освободить его. Zig никогда не освобождает Вашу память за Вас, поэтому владение всегда ясно.

Свободно меняйте Allocator

Поскольку Allocator является параметром, Вы можете менять стратегии, не изменяя логику. В тестах используется один Allocator, а в рабочей программе — другой.

Библиотеки остаются честными

Хорошо написанная библиотека никогда не скрывает выделение памяти. Она принимает Ваш Allocator, поэтому Вы управляете памятью даже внутри чужого кода.

Предсказуемость по замыслу

Это правило является частью обещания Zig не иметь скрытого управления потоком. Явное выделение памяти делает программы предсказуемыми и облегчает понимание их работы. ✅

Быстрая проверка

Вспомните, как функция Zig получает возможность выделять память.

Итоги

Вы увидели, что в Zig нет скрытых выделений памяти: память поступает только через переданный Вами Allocator, а всё созданное Вами принадлежит Вам и должно быть освобождено. 🎯

Можно начать бесплатно

Изучай Zig с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
30
Уроки
120

Часто задаваемые вопросы

Урок «Почему в Zig нет скрытых выделений памяти» бесплатный?

Да — полный текст урока «Почему в Zig нет скрытых выделений памяти» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Zig Academy, подпишись на CoddyKit PRO. Курс Zig Academy содержит 4 уроков всего.

Чему я научусь в уроке «Почему в Zig нет скрытых выделений памяти»?

Выделение памяти всегда передаётся явно. Ты практикуешь Zig Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Zig Academy?

Предыдущий опыт не требуется. Zig Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Почему в Zig нет скрытых выделений памяти»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Zig Academy?

Да. Каждый урок Zig Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Почему в Zig нет скрытых выделений памяти
  2. Интерфейс распределителя памяти
  3. alloc, free, create и destroy
  4. Динамические списки с ArrayList
← Назад к Zig Academy