ホームページ > バックエンド開発 > Golang > ポインタのマップエントリを削除すると、Go でメモリリークが発生しますか?

ポインタのマップエントリを削除すると、Go でメモリリークが発生しますか?

Mary-Kate Olsen
リリース: 2024-10-24 03:54:30
オリジナル
542 人が閲覧しました

Does Deleting a Map Entry of Pointers Cause Memory Leaks in Go?

Go でポインタのマップ内のエントリを削除するとメモリ リークが発生しますか?

スライス中またはポインタのスライス内の要素を削除すると、潜在的なメモリ リークが発生する可能性があります。これがマップにも当てはまるかどうかを調べてみましょう。


ソースの検査

Go ランタイム ソースを確認すると、mapdelete() 関数で、削除時にキーと値の両方のストレージがクリアされることがわかります。

<br>558 func mapdelete(t <em>maptype, h </em>hmap, key unsafe.Pointer) {</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">    // ...
ログイン後にコピー
ログイン後にコピー

600 memclr(k, uintptr(t.keysize))
601 v := unsafe.Pointer(uintptr(unsafe.Pointer(b)) dataOffsetbucketCntuintptr(t.keysize) iuintptr(t.valuesize))
602 memclr(v, uintptr(t.valuesize) ))

    // ...
ログイン後にコピー
ログイン後にコピー

618 }

これは、キーまたは値のポインターがゼロになり、それらの参照が壊れることを意味します

検証するテストの構築

これをさらに実証するには、 test:

<br>type point struct {</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">X, Y int
ログイン後にコピー

}

var m = map[int ]*point{}

func main() {

fillMap()
delete(m, 1)
runtime.GC()
time.Sleep(time.Second)
fmt.Println(m)
ログイン後にコピー

}

func fillMap() {

p := &amp;point{1, 2}
runtime.SetFinalizer(p, func(p *point) {
    fmt.Printf("Finalized: %p %+v\n", p, p)
})
m[1] = p
fmt.Printf("Put in map: %p %+v\n", p, p)
ログイン後にコピー

}

このテストを実行すると、登録されたファイナライザーが呼び出され、マップからのポインターの削除とその後のガベージ コレクションが確認されることがわかります。

結論

Go では、ポインタのマップからエントリを削除してもメモリ リークは発生しません。キーと値のストレージは両方とも削除時にクリアされ、保持されていたポインタが解放され、適切なガベージ コレクションが保証されます。

以上がポインタのマップエントリを削除すると、Go でメモリリークが発生しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php
前の記事:Go で Currency.Symbol の通貨書式設定の問題を修正する方法 次の記事:リフレクションを使用して構造体フィールド値を設定するときに SetCan() が常に False を返す問題を解決する方法は?
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
最新の問題
関連トピック
詳細>
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート