总述

slice本质上 就是一个 内存地址指针, 通过 len、cap 实现内存块 的管理

实现

数据结构:

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

// An notInHeapSlice is a slice backed by go:notinheap memory.
type notInHeapSlice struct {
    array *notInHeap
    len   int
    cap   int
}

常用方法

  • 扩容: growslice 扩容, len还是以前的大小, cap是新的cap.
  • 拷贝: 简单的内存复制
  • append: ?没找到实现

特殊设计

  1. 使用数组管理了最大cap, 避免溢出