constポインターとアラインメント
読み取り専用アクセスとメモリ配置を表現します。
「constポインターとアラインメント」はCoddyKit上の無料Zig Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはZig Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Zig Academyコースには全4レッスンが含まれています。
読み取り専用アクセス
値を共有しつつ変更しないことを保証したい場合があります。const pointer は読み取りを許可し、書き込みを禁止します。
*const T 型
不変データへのポインターは *const T と記述します。これを介して読み取ることはできますが、指し先に代入するとコンパイルエラーになります。
const x: i32 = 5;
const p: *const i32 = &x;const は & とともに引き継がれる
const 値のアドレスを取得すると、自動的に *const T になり、型によって不変性が維持されます。
const v: u8 = 9;
const p = &v; // *const u8可変ポインターは const に暗黙変換される
*T は *const T に自由に暗黙変換できます。書き込み権限をなくすことは常に安全だからです。逆方向の変換は許可されません。
var n: i32 = 1;
const ro: *const i32 = &n;const を優先する理由
*const T 型のパラメーターを受け取ると、呼び出し元に対して読み取りだけを行うことが伝わるため、関数を安心して使いやすくなります。
fn show(p: *const i32) void {
// read only
}アラインメントの意味
すべての型にはアラインメントがあります。これは、その型を配置しなければならないアドレス境界です。u32 には通常、4で割り切れるアドレスが必要です。
@alignOf で問い合わせる
組み込みの @alignOf(T) は、@sizeOf がサイズを返すのと同じように、型に必要なアラインメントをバイト単位で返します。
const a = @alignOf(u32);型に記述するアラインメント
align を使うと、*align(4) u8 のように、ポインターのアラインメントを型に記述して特定の境界を要求できます。
var p: *align(4) u8 = undefined;アラインメントが重要な理由
ハードウェアはアラインされたデータをより高速に読み取ります。また、一部のCPUはアラインされていないアクセスでフォルトを発生させます。Zigは型でアラインメントを追跡し、正しさを保ちます。
過剰なアラインメントと不足したアラインメント
ポインターはデフォルトより強いアラインメントを保証できますが、@alignCast のような明示的なキャストなしにアラインメントを弱めることはできません。
const と align の組み合わせ
この2つは自然に組み合わせられます。*const align(8) T は読み取り専用で、同時に8バイト境界も保証するポインターです。
確認問題
ポインターの指し先の値を読み取るだけの関数を書くとします。その意図を最も適切に表すパラメーター型はどれでしょうか。
まとめ
*const T ポインターはデータを読み取り専用で共有し、*T から暗黙変換できます。また、@alignOf と align(n) で確認できるアラインメントによって、メモリアクセスの正しさと速度が保たれます。🎯
よくある質問
「constポインターとアラインメント」レッスンは無料ですか?
はい。「constポインターとアラインメント」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Zig Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Zig Academyコースには全4レッスンが含まれています。
「constポインターとアラインメント」で何を学びますか?
読み取り専用アクセスとメモリ配置を表現します。 ブラウザで直接実行するハンズオンコードでZig Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Zig Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのZig Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「constポインターとアラインメント」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このZig Academyレッスンでコードを書いて実行できますか?
はい。すべてのZig Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- *Tによる単一要素ポインター
- ptr.*でデリファレンスする
- [*]Tによる複数要素ポインター
- constポインターとアラインメント