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


首先先說一下結論:沒有。

在最新版本 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM