首頁 >後端開發 >Golang >最初為空的 Go Map 分配多少記憶體?

最初為空的 Go Map 分配多少記憶體?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-24 19:31:15401瀏覽

How Much Memory Does an Initially Empty Go Map Allocate?

Go 映射中的記憶體分配:特定於實現的查詢

在 Go 映射的世界中,記憶體分配是一個謎。初始化映射時缺少初始容量參數使得分配空間的大小受實現的影響。但是我們要如何揭開這個隱藏分配的秘密呢?

深入研究 Go Map 原始碼會發現一個由標頭和桶數組組成的結構。在未指定初始空間的情況下,對應僅包含單一儲存桶。

標頭本身就是一個名副其實的字段迷宮:

  • 1 int
  • 1 uint8
  • 1 uint16
  • 1 uint8
  • 1 uint16
  • 1 uint32
  • 2 unsafe.Pointer

1 uintptr

在 64 位元機器上,int、uintptr 和 unsafe.Pointer 的大小與字元大小對齊(8 位元組)。此組合為標頭產生總共 40 個位元組。

現在,讓我們將注意力轉向儲存桶,其中包含 8 個 uint8 元素的陣列。這為總計數增加了 8 個位元組。 組合這些元件,我們得到總共 48 個位元組(對於 64 位元架構)。有了這些知識,我們就可以自信地揭開 Go 中映射記憶體分配的不確定性面紗。

以上是最初為空的 Go Map 分配多少記憶體?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn