首先先說一下結論:沒有。
在最新版本 Go 1.15 中, 在 runtime 部分中提到了一個改進:
Converting a small integer value into an interface value no longer causes allocation.
意思是說,將小整數轉換為接口值不再需要進行內存分配。小整數是指 0 到 255 之間的數。
那么這個是怎么實現的呢?
具體的代碼在這里: 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 會有額外堆內存分配嗎?
歡迎訪問我的個人網站:
李培冠博客:lpgit.com
