Go源码分析:slice

基础使用

  1. make可以指定slice的初始len和cap。
  2. 在创建slice时,如果切片发生了逃逸或者非常大,运行时需要runtime.makeslice在堆中初始化切片;如果切片不会发生逃逸并且非常小,make会被直接转换成先创建数组再通过下标切片的生成方式(此时编译器会在栈上或者静态存储区创建数组)。

切片扩容

1、如果期望的容量大于当前容量的2倍,则直接使用期望容量;
2、如果当前切片的长度小于1024,就会将容量翻倍;
3、如果当前切片的长度大于1024,就会每次增加25%的容量,直到新容量大于期望容量;
4、在确定切片的大致容量之后,还需要根据切片中的元素大小进行对齐内存。