IT用語集 › プログラミング › Strict aliasing

Strict aliasing

プログラミング Svenska → 更新: 2026-10-21

CやC++の規則で、オブジェクトは作られたときの型と互換性のある型を通してしか読めないというもの。破ると、最適化なしでは動くのに最適化すると壊れる。

コンパイラにとっての利点は大きい。intポインタとfloatポインタが同じメモリを指すことはないと仮定できるので、ストアをまたいで値をレジスタに保持し、ループをベクトル化し、読み出しを自由に並べ替えられる。この仮定がなければ、見知らぬポインタ経由の書き込みはすべて「何でも変わりうる」と扱わねばならない。代償を払うのは、ポインタのキャストでビット列を読み替えるコードだ。1990年代のCでは日常的な手口で、信号処理やシリアライズのコードに今も多く残る。症状は特徴的で、デバッグビルドでは正しく動き、最適化ビルドで結果がおかしくなる。合法的な手段はmemcpy、Cの共用体、現代のC++のbit_castである。Linuxカーネルは、この規則自体を無効にしてビルドする道を選んだ。

← 用語集に戻る