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

問題描述

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

解答

並非,拷貝全部切片的代價都是同樣的。數組

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

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

由於切片的底層有三個字段(一個 unsafe.Pointer,兩個 int)。指針

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

將一個切片變量分配給另外一個變量只會複製三個機器字,因此拷貝大切片與小切片的代價是同樣的。get

大切片與小切片的區別無非就是 lencap 這兩個值的大小不同。源碼

李培冠博客

歡迎訪問個人我的網站:博客

李培冠博客:lpgit.comit

相關文章
相關標籤/搜索