在 Go 1.15 中 var i interface{} = 3 會有額外堆內存分配嗎

首先先說一下結論, 在最新版本 Go 1.15 中, 在 runtime 部分中提到了一個改進:git

Converting a small integer value into an interface value no longer causes allocation.

意思是說,將小整數轉換爲接口值再也不須要進行內存分配。小整數是指 0 到 255 之間的數。github

那麼這個是怎麼實現的呢?golang

具體的代碼在這裏: runtime: prevent allocation when converting small ints to interfaces面試

總的來講就是 Go 中定義了一個特殊的靜態數組, 該數組由 256 個整數(0 - 256)組成.數組

當必須分配內存以將整數存儲在堆上, 並將其轉換爲接口的一部分時, 它首先檢查是否它能夠只返回指向數組中適當元素的指針.測試

Go 1.15 發行說明: https://golang.org/doc/go1.15網站

具體的測試請看這篇文章: 面試題:Go 1.15 中 var i interface{} = 3 會有額外堆內存分配嗎?3d

歡迎訪問個人我的網站:指針

李培冠博客:lpgit.comcode

相關文章
相關標籤/搜索