>백엔드 개발 >Golang >지정되지 않은 Go 맵은 얼마나 많은 메모리를 할당합니까?

지정되지 않은 Go 맵은 얼마나 많은 메모리를 할당합니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-18 15:19:25578검색

How Much Memory Does an Unspecified Go Map Allocate?

Golang 맵의 메모리 할당: 기본 구조 공개

초기 메모리 할당을 지정하지 않고 Go 맵을 생성할 때 실제 메모리 사용량은 미스터리로 남아 있습니다. 이 기사에서는 구현에 의해 할당된 메모리를 결정하는 방법에 대해 설명합니다.

Go 맵 구현에서 얻은 통찰력

Go 맵 유형의 소스 코드를 살펴보면 맵이 다음과 같이 구성되어 있음을 발견했습니다. 두 가지 구성 요소: 헤더(hmap)와 버킷 배열(bmap). 놀랍게도 맵 생성 중에 초기 할당이 지정되지 않은 경우 단일 버킷이 할당됩니다.

헤더의 구조(hmap)

헤더는 7개의 필드로 구성됩니다.

  • 1 * 정수
  • 2 * uint8
  • 1 * uint16
  • 1 * uint32
  • 2 * unsafe.Pointer
  • 1 * uintptr

64비트 시스템에서 int 크기, uintptr 및 unsafe.Pointer는 각각 8바이트이므로 총 40바이트가 됩니다. header.

버킷의 구조(bmap)

버킷은 uint8 유형의 8개 요소로 구성된 배열이므로 8바이트가 추가됩니다.

최종 메모리 할당

따라서 버킷이 하나인 맵에 할당되는 메모리는 다음과 같습니다. of:

  • 헤더 크기: 40바이트
  • 버킷 크기: 8바이트
  • 총 크기: 48바이트

이 계산은 다음과 같습니다. 64비트 아키텍처에 적용 가능하며 실제 크기는 플랫폼에 따라 약간 다를 수 있습니다.

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

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