0Pricing
Zig Academy · Урок

Интерфейс распределителя памяти

Один контракт для всех источников памяти.

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

Один распространённый тип

Каждый allocator в Zig передаётся как один тип — std.mem.Allocator. Ваш код взаимодействует только с этим интерфейсом, а не с конкретной реализацией.

const Allocator = std.mem.Allocator;

Интерфейс, а не класс

std.mem.Allocator — это небольшой интерфейс: указатель и таблица функций. Он описывает возможности allocator, а не указывает, какой именно allocator используется.

Много реализаций, одна форма

Page allocator, арена или allocator для тестирования имеют одну и ту же форму. Чтобы заменить один другим, не нужно менять вызывающий код.

Получите настоящий allocator

Сначала получите конкретный allocator, а затем возьмите его дескриптор .allocator(), чтобы передавать его как универсальный тип std.mem.Allocator.

var gpa = std.heap.GeneralPurposeAllocator(.{}){};
const a = gpa.allocator();

Передавайте его дальше

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

try doWork(a);

Page allocator

std.heap.page_allocator напрямую запрашивает память у OS. Он прост, но работает крупными блоками, поэтому подходит для больших или долгоживущих блоков, а не для маленьких.

const a = std.heap.page_allocator;

GeneralPurposeAllocator

GeneralPurposeAllocator — повседневный выбор в отладочных сборках. Он отслеживает каждый блок и сообщает об утечках и повторном освобождении памяти.

Зачем нужен интерфейс

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

Функции просто запрашивают allocator

Функции не важно, какой allocator ей передали. Она просто вызывает такие методы, как alloc и free, у переданного ей std.mem.Allocator.

const buf = try a.alloc(u8, 16);

Глобального allocator нет

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

Тестируйте с другим allocator

В тестах вместо него передавайте std.testing.allocator. Код остаётся тем же, но теперь утечки приводят к провалу теста — это доказывает пользу интерфейса. ✅

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

Подумайте, какой тип объединяет все allocator в Zig.

Итоги

Вы узнали, что std.mem.Allocator — это один интерфейс для множества реализаций, поэтому код, запрашивающий память, работает с любым переданным вами allocator. 🎯

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

Урок «Интерфейс распределителя памяти» бесплатный?

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

Чему я научусь в уроке «Интерфейс распределителя памяти»?

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

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

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

Сколько времени занимает урок «Интерфейс распределителя памяти»?

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

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

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

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

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