runtime篇五:slice
本系列代码基于golang1.19 runtime篇一:接口 runtime篇二:通道 runtime篇三:defer runtime篇四:panic runtime篇五:slice 推荐阅读:slice和数组的区别 切片append规则 1. 切片的结构 切片的底层表示是runtime.slice: type slice struct { array unsafe.Pointer len int cap int } 非常简单,只有一个array指针指向底层数组结构,len标记切片长度,cap标记数组容量。 2. 新建一个切片 当我们使用如make([]int, 0)语法来新建一个切片的时候,调用的是runtime.makeslice函数: func makeslice(et *_type, len, cap int) unsafe.Pointer { mem, overflow := math.MulUintptr(et.size, uintptr(cap)) if overflow || mem > maxAlloc || len < 0 || len > cap { // NOTE: Produce a 'len out of range' error instead of a // 'cap out of range' error when someone does make([]T, bignumber)....