0Pricing
Zig Academy · Lezione

extern struct e layout ABI

Corrisponda al layout di memoria delle struct C.

extern struct e layout ABI è una lezione Zig Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Zig Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Zig Academy include 4 lezioni in totale.

Comunicare con C

Quando Zig chiama codice C, entrambi i lati devono concordare sul layout della memoria. Questo contratto condiviso è l'ABI.

Le struct normali non sono garantite

Un normale struct consente a Zig di scegliere liberamente l'ordine dei campi e il padding, quindi il layout potrebbe non corrispondere a quello previsto da una libreria C.

Introduzione a extern struct

Contrassegnando un tipo come extern struct, Zig dispone i campi utilizzando la C ABI, facendo corrispondere ogni campo a quello della struct C.

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

I campi mantengono l'ordine

Un extern struct mantiene l'ordine della dichiarazione, proprio come C, quindi il primo campo viene sempre prima in memoria.

Padding come in C

A differenza di una packed struct, extern struct aggiunge comunque il padding per l'allineamento, esattamente come farebbe un compilatore C.

Packed ed extern a confronto

Utilizzi packed per un layout preciso a livello di bit ed extern per corrispondere al layout dei byte di C. Risolvono problemi di layout diversi.

Passare struct a C

Un extern struct può essere passato direttamente a una funzione C, perché il suo layout corrisponde a quello dell'header rispetto al quale la funzione è stata compilata.

extern fn use_point(p: Point) void;

Controllare la dimensione

Verifichi che un extern struct corrisponda a C con @sizeOf, che restituisce il numero totale di byte, incluso l'eventuale padding per l'allineamento.

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

Esaminare gli offset dei campi

Utilizzi @offsetOf per vedere esattamente dove inizia ogni campo: è molto utile per verificare che una struct sia allineata correttamente rispetto a C.

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

Solo tipi compatibili con C

I campi di un extern struct devono essere tipi compatibili con C, quindi al suo interno non sono consentite strutture specifiche di Zig come le slice.

Il collegamento con C

Insieme, extern struct e la C ABI consentono a Zig e C di condividere dati in modo sicuro, senza copie né ipotesi sul layout. 🔗

Verifica rapida

Ricordi a quale layout è destinato extern struct.

Riepilogo

Ha imparato che extern struct corrisponde alla C ABI: campi ordinati con padding nello stile di C, passabili a C e verificabili con @sizeOf e @offsetOf. 🎉

Domande Frequenti

La lezione «extern struct e layout ABI» è gratuita?

Sì — il testo completo di «extern struct e layout ABI» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Zig Academy, passa a CoddyKit PRO. Il corso Zig Academy include 4 lezioni in totale.

Cosa imparerò in «extern struct e layout ABI»?

Corrisponda al layout di memoria delle struct C. Eserciti Zig Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Zig Academy?

Non è richiesta alcuna esperienza precedente. Zig Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.

Quanto tempo richiede la lezione «extern struct e layout ABI»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Zig Academy?

Sì. Ogni lezione Zig Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. packed struct per un layout esatto
  2. Interi di larghezza arbitraria come u3
  3. Campi di bit e flag
  4. extern struct e layout ABI
← Torna a Zig Academy