>백엔드 개발 >Golang >Go에서 슬라이스를 실제로 지우고 메모리를 되찾으려면 어떻게 해야 합니까?

Go에서 슬라이스를 실제로 지우고 메모리를 되찾으려면 어떻게 해야 합니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-19 14:36:03641검색

How do I truly clear a slice in Go and reclaim its memory?

Go에서 슬라이스 지우기

제공된 코드 조각은 슬라이스 길이를 0으로 설정하여 슬라이스를 "삭제"하는 한 가지 접근 방식을 보여줍니다.

package main

import "fmt"

func main() {
    letters := []string{"a", "b", "c", "d"}
    fmt.Println(cap(letters))
    fmt.Println(len(letters))
    // clear the slice
    letters = letters[:0]
    fmt.Println(cap(letters))
    fmt.Println(len(letters))
}

이 접근 방식은 슬라이스의 내용을 지우는 것처럼 보일 수 있지만 해제되지는 않습니다. 슬라이스와 연관된 기본 메모리를 가비지 수집기로 보냅니다. 슬라이스를 완전히 지우고 메모리를 회수하려면 nil으로 설정하는 것이 가장 좋습니다.

package main

import "fmt"

func main() {
    letters := []string{"a", "b", "c", "d"}
    fmt.Println(cap(letters))
    fmt.Println(len(letters))
    // clear the slice
    letters = nil
    fmt.Println(cap(letters))
    fmt.Println(len(letters))
}

슬라이스를 nil로 설정하면 여러 가지 이점이 있습니다.

  • 기본 메모리는 가비지 컬렉터로 해제됩니다.
  • 슬라이스는 용량이 0이고 0인 빈 슬라이스로 동작합니다. 길이입니다.
  • 원본 슬라이스에 대한 별칭은 더 이상 동일한 기본 메모리를 가리키지 않습니다.

슬라이스의 용량을 0으로 변경해도 지워지지 않는다는 점에 유의하는 것이 중요합니다. 기본 메모리를 슬라이스하거나 해제합니다. 그러나 슬라이스를 nil로 설정하면 할당된 메모리가 효과적으로 제거되고 슬라이스가 초기 상태로 재설정됩니다.

위 내용은 Go에서 슬라이스를 실제로 지우고 메모리를 되찾으려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.