go 切片的扩容

数据库55

slice

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

```go
func makeslice(et *_type, len, cap int) unsafe.Pointer {
// 1. 计算需要申请的容量,并判断是否内存溢出
mem, overflow := math.MulUintptr(et.size, uintptr(cap))

// 2. 内存溢出原因
if overflow || mem > maxAlloc || len < 0 || len > cap {
// 计算slice所需内存通过MulUintptr来实现的
mem, overflow := math.MulUintptr(et.size, uintptr(len))
if overflow || mem > maxAlloc || len < 0 {

输入验证码查看隐藏内容

扫描二维码关注本站微信公众号 Johngo学长
或者在微信里搜索 Johngo学长
回复 svip 获取验证码
wechat Johngo学长