亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Golang 中 make(map[type1]type2) 的內部實現是什么?

Golang 中 make(map[type1]type2) 的內部實現是什么?

Go
慕沐林林 2023-07-31 15:53:46
Golang 是一種原生編程語言。所以比動態語言(如 python 和 ruby)有很多限制。當將 Maps 初始化為 時m := make(Map[string]int),該映射m似乎能夠包含無窮多個鍵值。但是,當使用地圖文字或使用 cap 初始化地圖時,地圖不能包含無窮多個鍵值。有文章說,沒有上限的 make 會為此映射分配大量內存。但這不是選項,因為如果這是真的,那么初始化單個映射時將會消耗巨大的內存。但無論我使用什么計算機硬件監控工具,我的程序運行之前和期間的內存沒有任何區別。func main(){? ? Hello()}func Hello(){? ? m := make(SizeRecord)? ? l := 10000000? ? for i := 0; i < l; i++ {? ? ? ? m[strconv.Itoa(i)] = Size{float64(rand.Intn(100)), float64(rand.Intn(100)), float64(rand.Intn(100))}? ? }? ? fmt.Println(m)}該程序需要一段時間才能執行。在沒有上限的情況下使用替代實現來表示地圖,并使用統一的接口來訪問地圖,就像其他具有有限功能的地圖一樣容量。如果我的理解是錯誤的,有人可以告訴我什么是正確的嗎?如果我是對的,為什么 golang 不以這種方式實現所有映射?
查看完整描述

1 回答

?
手掌心

TA貢獻1942條經驗 獲得超3個贊

您對地圖工作原理的理解不正確。規范說:

Blockquote 初始容量不限制其大?。河成鋾鲩L以容納其中存儲的項目數量,但 nil 映射除外。nil 映射相當于空映射,只不過不能添加任何元素。

因此,容量只是一個提示,它會影響地圖的初始大小。地圖可以根據需要增長。對于給定容量的地圖沒有單獨的實現。



查看完整回答
反對 回復 2023-07-31
  • 1 回答
  • 0 關注
  • 207 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號