Go源码分析:slice
基础使用
- make可以指定slice的初始len和cap。
- 在创建slice时,如果切片发生了逃逸或者非常大,运行时需要runtime.makeslice在堆中初始化切片;如果切片不会发生逃逸并且非常小,make会被直接转换成先创建数组再通过下标切片的生成方式(此时编译器会在栈上或者静态存储区创建数组)。
切片扩容
1、如果期望的容量大于当前容量的2倍,则直接使用期望容量;
2、如果当前切片的长度小于1024,就会将容量翻倍;
3、如果当前切片的长度大于1024,就会每次增加25%的容量,直到新容量大于期望容量;
4、在确定切片的大致容量之后,还需要根据切片中的元素大小进行对齐内存。