> 백엔드 개발 > Golang > 포인터의 맵 항목을 삭제하면 Go에서 메모리 누수가 발생합니까?

포인터의 맵 항목을 삭제하면 Go에서 메모리 누수가 발생합니까?

Mary-Kate Olsen
풀어 주다: 2024-10-24 03:54:30
원래의
544명이 탐색했습니다.

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)) dataOffset bucketCntuintptr(t.keysize) iuintptr(t.valuesize))
602 memclr(v, uintptr(t.valuesize) ))

    // ...
로그인 후 복사
로그인 후 복사

618 }

이는 키 또는 값의 모든 포인터가 0으로 설정되어 참조가 중단됨을 의미합니다. 지도의 내부 데이터 구조에 적용됩니다.

검증을 위한 테스트 구성

이를 추가로 입증하기 위해 다음을 구성할 수 있습니다. 테스트:

<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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php
이전 기사:Go에서 Money.Symbol의 통화 형식 문제를 해결하는 방법은 무엇입니까? 다음 기사:리플렉션을 사용하여 구조체 필드 값을 설정할 때 SetCan()이 항상 False를 반환하는 문제를 해결하는 방법은 무엇입니까?
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
최신 이슈
관련 주제
더>
인기 추천
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿