golang 拷貝大切片一定比小切片代價大嗎


問題描述

拷貝大切片一定比小切片代價大嗎?

解答

並不是,拷貝所有切片的代價都是一樣的。

看一下源碼,就很清楚了:

type slice struct {
	array unsafe.Pointer
	len   int
	cap   int
}

因為切片的底層有三個字段(一個 unsafe.Pointer,兩個 int)。

其中 unsafe.Pointer 指向的是切片底層數組的指針,這是切片的存儲空間,第二個字段是切片的長度,第三個字段是切片的容量。

將一個切片變量分配給另一個變量只會復制三個機器字,所以拷貝大切片與小切片的代價是一樣的。

大切片與小切片的區別無非就是 lencap 這兩個值的大小不一樣。

李培冠博客

歡迎訪問我的個人網站:

李培冠博客:lpgit.com


免責聲明!

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



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