alloc、free、create、destroy
アロケーターの基本操作を学びます。
「alloc、free、create、destroy」はCoddyKit上の無料Zig Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはZig Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Zig Academyコースには全4レッスンが含まれています。
4つの基本操作
アロケータには4つの重要な呼び出しがあります。複数の要素にはallocとfree、単一の値にはcreateとdestroyを使います。
allocはスライスを返す
allocを使って、要素の並びを要求します。要素の型と個数を渡すと、その個数分の要素を持つスライスが返されます。
const buf = try a.alloc(u8, 64);allocは失敗することがある
ヒープが枯渇する可能性があるため、allocはエラーユニオンを返します。tryキーワードを使えば、OutOfMemoryのケースを簡潔に処理できます。
const list = try a.alloc(i32, 10);freeで返却する
使い終わったら、取得したものとまったく同じスライスをfreeに渡して呼び出します。忘れると、GeneralPurposeAllocatorがリークを報告します。
a.free(buf);すぐにdefer freeする
よくある習慣は、allocが成功した直後にdefer a.freeと書くことです。これにより、スコープの終了方法にかかわらず後片付けが実行されます。
const buf = try a.alloc(u8, 64);
defer a.free(buf);1つの値にはcreate
ヒープ上に値がちょうど1つ必要な場合はcreateを使います。型を受け取り、新しいメモリへの単一要素ポインターを返します。
const node = try a.create(Node);ポインターを通して書き込む
createはポインターを返すため、指し示すデータを使う前に、.*を使ってそのポインター経由で値を設定します。
node.* = Node{ .value = 42 };ポインターをdestroyする
createされた値は、createが返したのと同じポインターをdestroyに渡して解放します。これはcreateと対になる呼び出しです。
a.destroy(node);対応する組み合わせを守る
ルールは厳密です。allocにはfree、createにはdestroyを組み合わせます。決して組み合わせを入れ替えたり、割り当てていないスライスをfreeしたりしないでください。
同じアロケータで解放する
メモリは、生成したものと同じアロケータを使って必ず解放してください。アロケータを混在させると、コンパイラーでは検出できない破損につながります。
エラー時はdefer本体を実行しない
alloc自体が失敗した場合、メモリは確保されていないため、解放するものはありません。そのため、defer freeはallocの成功後に記述します。✅
確認問題
各割り当て呼び出しを、正しい解放呼び出しと組み合わせてください。
まとめ
スライスにはalloc/free、単一の値にはcreate/destroyを使い、常に同じアロケータで解放するという組み合わせを学びました。🎯
よくある質問
「alloc、free、create、destroy」レッスンは無料ですか?
はい。「alloc、free、create、destroy」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Zig Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Zig Academyコースには全4レッスンが含まれています。
「alloc、free、create、destroy」で何を学びますか?
アロケーターの基本操作を学びます。 ブラウザで直接実行するハンズオンコードでZig Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Zig Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのZig Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「alloc、free、create、destroy」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このZig Academyレッスンでコードを書いて実行できますか?
はい。すべてのZig Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Zigに隠れたメモリ確保がない理由
- アロケーターインターフェース
- alloc、free、create、destroy
- ArrayListによる動的リスト