"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > GO에서 포인터 재생산을 사용할 때 메모리 누출을 피하는 방법은 무엇입니까?

GO에서 포인터 재생산을 사용할 때 메모리 누출을 피하는 방법은 무엇입니까?

2025-04-19에 게시되었습니다
검색:642

*int) : How Can I Avoid Memory Leaks When Reslicing Go Slices with Pointers?

s : = []*int {new (int), new (int)}

s = s [: 1]

길이는 1이되지만 후원 배열은 그대로 유지됩니다. 두 번째 요소의 사용하지 않은 포인터는 여전히 배열의 일부로 메모리에 있습니다. 그것은 어떤 조각으로도 참조되지 않기 때문에 접근 할 수 없게되며 쓰레기 수집가에 의해 자유롭게 해방 될 수 없어 메모리 누출을 초래합니다.

s := []*int{new(int), new(int)}

2}

s = s[:1]

포인터 및 스트러크

가 포인터를 포함하는 스트러크를 보유 할 때 :

t := []int{1, 2}

슬라이스가 Book1 만 유지하더라도 Book2의 저자 및 제목 문자열은 여전히 ​​배열의 일부로 메모리에 있습니다. 이를 방지하려면 슬라이싱하기 전에 Book2에 Zero 값을 할당하십시오. bkslice = bkslice [: 1]

이것은 book2의 문자열에 대한 참조를 제거합니다. 예를 들어, 포인터, 슬라이스 또는 기타 복잡한 데이터 구조 인 필드가있는 structs는 외부 참조를 차단하기 위해 재판매하기 전에 제로를 제로해야합니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3