首頁 > 後端開發 > Golang > 新建立的 Go Map 消耗多少記憶體?

新建立的 Go Map 消耗多少記憶體?

Linda Hamilton
發布: 2024-12-06 04:36:19
原創
680 人瀏覽過

How Much Memory Does a Newly Created Go Map Consume?

估計為 Go 映射保留的記憶體

使用 Go 映射時,估計它們消耗的記憶體通常很有用。雖然文件指出初始記憶體分配取決於實現,但這裡更深入地介紹瞭如何確定這一點:

檢查映射源代碼

Go 映射基於兩種類型構建: hmap(標頭)和bmap(桶數組)。檢查原始碼可以發現,當未指定初始空間時 (foo := make(map[string]int)),映射中只會建立一個儲存桶。

Map 標頭分解

地圖頭本身包含幾個欄位:

  1. int(bmap的大小陣列)
  2. uint8(桶數)
  3. uint16(溢桶數)
  4. uint32(成長地圖之前的最小閾值)
  5. 兩個不安全指標(對於元素和指標鍵)
  6. uintptr(未使用field)

假設是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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板