切片是引用型別的資料
每乙個切片引用了底層的陣列
切片本身不儲存任何資料,都是這個底層的陣列儲存,所以修改切片也就是修改這個陣列中的資料
向切片中新增資料的時候,如果沒有超過容量,直接新增,如果超過容量自動增長
切片一旦擴容,就重新指向乙個新的底層陣列
package main
import
"fmt"
func
main()
fmt.
println
(slice1)
fmt.
printf(,
len(slice1)
,cap
(slice1)
, slice1)
//0xc0000a8020這裡最後乙個引數的slicel是切片引用的底層陣列位址,加&的話就代表切片本身的引用位址了
fmt.
println
("***********************************="
) slice1 =
(slice1,1)
fmt.
println
(slice1)
fmt.
printf(,
len(slice1)
,cap
(slice1)
, slice1)
//0xc0000b2040切片擴容後重新指向乙個新的底層陣列
//slice2 := slice1
//slice2[0] = 1000
長度:4
容量:4
***********************************=
[1 2 3 4 1]
長度:5
容量:8
*/
再次總結: slice指向的是乙個底層的陣列可以通過格式化輸出fmt,printf切片名 檢視指向陣列的引用位址, 注意區分&切片名檢視的是切片本身的應用,它的容量和長度是可以自增長的,,當長度超過容量容量會自動成倍增長, 切自動增長後底層陣列的引用位址也會發生變化,
切片本身是不儲存資料的,都是底層資料進行儲存的,通過下標修改其實就是修改陣列的元素,
slice記憶體分配
slice是golang提供的乙個很好的符合型別。既支援資料動態擴充套件,又能隨機訪問,使資料保持很好的區域性性。但是slice有乙個效能可能導致資料的一致性和預期不一致,就是它會按需為slice收集記憶體。參考這段 package main import fmt func main what s ...
關於slice分配記憶體
slice是golang提供的乙個很好的符合型別。既支援資料動態擴充套件,又能隨機訪問,使資料保持很好的區域性性。但是slice有乙個效能可能導致資料的一致性和預期不一致,就是它會按需為slice收集記憶體。參考這段 output data v is one three data q is one ...
Slice原始碼分析
package runtime import runtime internal math runtime internal sys unsafe slice 包括array,這是乙個指標,指向實際資料儲存的位置,len是當前的切片資料長度,cap是容量。type slice struct 此處涉及到...