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
- Dlaczego Zig nie ma ukrytych alokacji
- Interfejs alokatora
- alloc, free, create, destroy
- Dynamiczne listy z ArrayList