KDOC 442: メモリエイリアシング検出と対策の例を見る
この文書のステータス
- 作成
- 2025-09-22 貴島
- レビュー
- 2025-09-22 貴島
概要
メモリエイリアシングとは、異なる変数や参照が同じメモリ領域を指している状態を指す。メモリの効率使用に寄与するが、バグの原因になる可能性もある。
big: handle aliasing correctly for Rat.SetFrac. · golang/go@c7cf56bでは、メモリエイリアシング検出と、検出した場合のコピーを実装している。
// SetFrac sets z to a/b and returns z. func (z *Rat) SetFrac(a, b *Int) *Rat { - z.a.Set(a) z.a.neg = a.neg != b.neg - z.b = z.b.set(b.abs) + babs := b.abs + if &z.a == b || alias(z.a.abs, babs) { + babs = nat(nil).set(babs) // make a copy + } + z.a.abs = z.a.abs.set(a.abs) + z.b = z.b.set(babs) return z.norm() }
&z.a == b
直接ポインタを比較するalias(z.a.abs, babs)
基底配列が同じでないか確認する
関連
なし。