>백엔드 개발 >Golang >처음에 빈 Go 맵은 얼마나 많은 메모리를 할당합니까?

처음에 빈 Go 맵은 얼마나 많은 메모리를 할당합니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-24 19:31:15407검색

How Much Memory Does an Initially Empty Go Map Allocate?

Go 맵의 메모리 할당: 구현별 조사

Go 매핑의 세계에서 메모리 할당은 수수께끼를 제시합니다. 맵을 초기화할 때 초기 용량 매개변수가 없으면 할당된 공간의 크기는 구현의 변덕에 따라 달라집니다. 그런데 이 숨겨진 할당의 비밀을 어떻게 밝힐 수 있을까요?

Go 맵 소스 코드를 자세히 살펴보면 헤더와 버킷 배열로 구성된 구조가 드러납니다. 지정되지 않은 초기 공간의 경우 맵은 단일 버킷으로만 구성됩니다.

헤더 자체는 필드의 진정한 미로입니다.

  • 1 int
  • 1 단위8
  • 1 단위16
  • 1 uint32
  • 2 unsafe.Pointer
  • 1 uintptr

64비트 시스템에서 int, uintptr 및 unsafe의 크기. 포인터는 단어 크기에 맞춰 정렬됩니다. (8바이트). 이 구성으로 헤더에 총 40바이트가 생성됩니다.

이제 8개의 uint8 요소 배열이 포함된 버킷에 주목해 보겠습니다. 이로 인해 전체 집계에 8바이트가 추가됩니다.

이러한 구성 요소를 결합하면 총 48바이트(64비트 아키텍처의 경우)에 도달합니다. 이러한 지식으로 무장하면 Go에서 맵 메모리 할당을 둘러싼 불확실성의 장막을 자신 있게 뚫을 수 있습니다.

위 내용은 처음에 빈 Go 맵은 얼마나 많은 메모리를 할당합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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