0Pricing
Zig Academy · Lekcja

Interfejs alokatora

Jeden kontrakt dla wszystkich źródeł pamięci.

Interfejs alokatora to bezpłatna lekcja Zig Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Zig Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Zig Academy zawiera 4 lekcji w sumie.

Jeden często używany typ

Każdy alokator w Zig jest przekazywany jako jeden typ, std.mem.Allocator. Kod korzysta z tego jednego interfejsu, a nie z konkretnego mechanizmu implementacji.

const Allocator = std.mem.Allocator;

Interfejs, nie klasa

std.mem.Allocator to niewielki interfejs: wskaźnik oraz tabela funkcji. Opisuje możliwości alokatora, a nie to, którego alokatora używasz.

Wiele mechanizmów implementacji, jeden kształt

Alokator stron, arena czy alokator testowy udostępniają ten sam kształt. Zamiana jednego na drugi nie wymaga zmiany kodu wywołującego.

Uzyskaj rzeczywisty alokator

Najpierw uzyskujesz konkretny alokator, a następnie pobierasz jego uchwyt .allocator(), aby przekazywać go dalej jako ogólny typ std.mem.Allocator.

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

Przekaż go dalej

Gdy masz już alokator, przekazujesz tę jedną wartość do każdej funkcji, która potrzebuje pamięci. Cały program może korzystać z jednego źródła.

try doWork(a);

Alokator stron

std.heap.page_allocator bezpośrednio prosi system operacyjny o pamięć. Jest prosty, ale mało precyzyjny, dlatego nadaje się do dużych lub długo używanych bloków, a nie do małych.

const a = std.heap.page_allocator;

GeneralPurposeAllocator

GeneralPurposeAllocator to codzienny wybór w kompilacjach debugowych. Śledzi każdy blok i zgłasza wycieki oraz wielokrotne zwolnienia pamięci.

Dlaczego interfejs pomaga

Programowanie z użyciem interfejsu oznacza, że funkcja działa z dowolnym alokatorem. Ten sam kod działa w testach, na sprzęcie bez systemu operacyjnego i na serwerze.

Funkcje po prostu proszą

Funkcja nie musi wiedzieć, który alokator otrzymała. Po prostu wywołuje metody takie jak alloc i free na przekazanym jej std.mem.Allocator.

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

Brak globalnego alokatora

Zig nie ma jednej globalnej sterty. To Ty decydujesz, którego alokatora używa każda część programu, dzięki czemu źródła pamięci pozostają widoczne i lokalne.

Testuj z innym alokatorem

W testach zamiast tego przekazujesz std.testing.allocator. Kod pozostaje taki sam, ale teraz wycieki powodują niepowodzenie testu, pokazując zalety interfejsu. ✅

Szybkie sprawdzenie

Zastanów się, jaki typ współdzielą wszystkie alokatory Zig.

Podsumowanie

Dowiedziałeś się, że std.mem.Allocator jest jednym interfejsem dla wielu mechanizmów implementacji, dzięki czemu kod proszący o pamięć działa z każdym dostarczonym alokatorem. 🎯

Często zadawane pytania

Czy lekcja „Interfejs alokatora” jest bezpłatna?

Tak — pełny tekst „Interfejs alokatora” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Zig Academy, przejdź na CoddyKit PRO. Kurs Zig Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Interfejs alokatora”?

Jeden kontrakt dla wszystkich źródeł pamięci. Ćwiczysz Zig Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Zig Academy?

Nie wymagamy żadnego doświadczenia. Zig Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „Interfejs alokatora”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Zig Academy?

Tak. Każda lekcja Zig Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Dlaczego Zig nie ma ukrytych alokacji
  2. Interfejs alokatora
  3. alloc, free, create, destroy
  4. Dynamiczne listy z ArrayList
← Powrót do Zig Academy