0Pricing
Zig Academy · レッスン

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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Zigに隠れたメモリ確保がない理由
  2. アロケーターインターフェース
  3. alloc、free、create、destroy
  4. ArrayListによる動的リスト
← Zig Academyに戻る