0Pricing
Zig Academy · Lekcja

extern struct i układ ABI

Dopasuj układ pamięci struktury C.

extern struct i układ ABI to bezpłatna lekcja Zig Academy na CoddyKit. To lekcja 4 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.

Komunikacja z C

Gdy Zig wywołuje kod C, obie strony muszą uzgodnić układ pamięci. Ten wspólny kontrakt to ABI.

Zwykłe struktury nie dają gwarancji

Zwykły struct pozwala bibliotece Zig dowolnie ustalać kolejność pól i dopełnienie, więc jego układ może nie odpowiadać oczekiwaniom biblioteki C.

Wprowadzenie do extern struct

Oznacz typ jako extern struct, a Zig ułoży jego pola zgodnie z ABI języka C, dopasowując je pole po polu do struktury C.

const Point = extern struct {
    x: i32,
    y: i32,
};

Pola pozostają w kolejności

Element extern struct zachowuje kolejność deklaracji, podobnie jak C, więc pierwsze pole zawsze znajduje się jako pierwsze w pamięci.

Dopełnienie jak w C

W przeciwieństwie do packed struct element extern struct nadal dodaje dopełnienie wymagane do wyrównania, dokładnie tak jak zrobiłby to kompilator C.

Packed a extern

Używaj packed do uzyskania układu odwzorowującego bity dokładnie, a extern do dopasowania układu bajtów do C. Rozwiązują one różne problemy związane z układem.

Przekazywanie struktur do C

Element extern struct można przekazać bezpośrednio do funkcji C, ponieważ jego układ odpowiada nagłówkowi, względem którego skompilowano tę funkcję.

extern fn use_point(p: Point) void;

Sprawdź rozmiar

Potwierdź zgodność extern struct z C za pomocą @sizeOf, które podaje całkowitą liczbę bajtów, w tym ewentualne dopełnienie wymagane przez wyrównanie.

const n = @sizeOf(Point); // 8

Sprawdzanie przesunięć pól

Użyj @offsetOf, aby dokładnie sprawdzić, gdzie zaczyna się każde pole. To świetny sposób na zweryfikowanie zgodności układu struktury z C.

const off = @offsetOf(Point, "y"); // 4

Tylko typy zgodne z C

Pola w extern struct muszą mieć typy zgodne z C, dlatego charakterystyczne wyłącznie dla Zig konstrukcje, takie jak wycinki, nie są w niej dozwolone.

Most do C

Wspólnie extern struct i ABI języka C pozwalają Zig i C bezpiecznie współdzielić dane bez kopiowania i zgadywania układu. 🔗

Szybkie sprawdzenie

Przypomnij sobie, z czym ma być zgodny extern struct.

Podsumowanie

Dowiedziałeś się, że extern struct jest zgodny z ABI języka C: zachowuje kolejność pól i dopełnienie w stylu C, można go przekazywać do C, a jego układ weryfikuje się za pomocą @sizeOf i @offsetOf. 🎉

Często zadawane pytania

Czy lekcja „extern struct i układ ABI” jest bezpłatna?

Tak — pełny tekst „extern struct i układ ABI” 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 „extern struct i układ ABI”?

Dopasuj układ pamięci struktury C. Ć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 4 z 4.

Ile czasu zajmuje lekcja „extern struct i układ ABI”?

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. packed struct dla dokładnego układu
  2. Liczby całkowite o dowolnej szerokości, na przykład u3
  3. Pola bitowe i flagi
  4. extern struct i układ ABI
← Powrót do Zig Academy