問題描述
拷貝大切片一定比小切片代價大嗎?
解答
並不是,拷貝所有切片的代價都是一樣的。
看一下源碼,就很清楚了:
type slice struct {
array unsafe.Pointer
len int
cap int
}
因為切片的底層有三個字段(一個 unsafe.Pointer
,兩個 int
)。
其中 unsafe.Pointer
指向的是切片底層數組的指針,這是切片的存儲空間,第二個字段是切片的長度,第三個字段是切片的容量。
將一個切片變量分配給另一個變量只會復制三個機器字,所以拷貝大切片與小切片的代價是一樣的。
大切片與小切片的區別無非就是 len
和 cap
這兩個值的大小不一樣。
李培冠博客
歡迎訪問我的個人網站:
李培冠博客:lpgit.com