みなさんは、C言語で異なるポインタが同じアドレスを指していても、それらが「別物」として扱われることがあるのをご存じですか?一見すると同じメモリ位置を指すポインタでも、その由来(provenance1)によって、コンパイラの最適化や動作が変わることがあります。 この記事では、C言語の新しい国際標準ISO/IEC TS 6010:20252で定められた「provenance-aware memory object model」について、実例を交えながら徹底的に解説します。 更新 (2025-07-02): @Loofehtさんからの貴重なご指摘をいただき、記事の技術的な誤りを修正しました。特に以下の点を改善しています。 「コンパイラ最適化」→「手動最適化」という用語の修正 recip(&x, &x)が収束しない(発散する)ことの明記と実証 より実践的な例への差し替え 建設的なフィードバックをい