使用 Go 映射時,估計它們消耗的記憶體通常很有用。雖然文件指出初始記憶體分配取決於實現,但這裡更深入地介紹瞭如何確定這一點:
Go 映射基於兩種類型構建: hmap(標頭)和bmap(桶數組)。檢查原始碼可以發現,當未指定初始空間時 (foo := make(map[string]int)),映射中只會建立一個儲存桶。
地圖頭本身包含幾個欄位:
假設是64 位元架構,int、uintptr 和 unsafe.Pointer 的大小各為 8 個位元組。這為我們提供了標頭大小:
1 * 8 + 1 * 1 + 1 * 2 + 1 * 4 + 2 * 8 + 1 * 8 = 40 bytes
映射中的每個存儲桶都是一個由八個uint8 值組成的數組,這會額外添加8 個位元組:
8 * 1 = 8 bytes
將header 和Bucket大小相加,我們得到總記憶體消耗of:
40 + 8 = 48 bytes (64-bit architecture)
此估計可用於估算新建立的未指定初始空間的 Go 映射的記憶體使用量。
以上是新建立的 Go Map 消耗多少記憶體?的詳細內容。更多資訊請關注PHP中文網其他相關文章!