18版本后) _
本文由 简悦 SimpRead 转码, 原文地址 www.cnblogs.com 合集 - golang(4)1.Go 语言中 List 基本用法与源码详解 2023-05-142.golang slice (切片) 扩容机制详解(1.18 版本后)2023-07-193.Golang - Slice 学习笔记 2023-08-224.Go 语言中闭包与 defer2023-09-09收起
slice 源码定义:
1 |
|
growslice() 方法:用于 slice 的扩容
1 |
|
具体情况如下:
如果请求容量 大于 两倍现有容量 ,则新容量 直接为请求容量
否则(请求容量 小于等于 两倍现有容量)
如果 现有容量 小于 256 ,则新容量是原来的两倍
否则:新容量 = 1.25 原容量 + 3/4 阈值 “这个公式给出了从 1.25 倍增长 过渡到 2 倍增长,两者之间的平滑过渡。” 在此情况下,如果发生了溢出,将新容量设置为请求的容量大小
注意:目前仍然存在追加顺序的问题:当前切片的扩容,严格依赖第一个切片的容量,以第一个切片的容量进行计算,如果交换两个切片,两种方式得到的新切片的容量大概率是不一样的
EOF
* 本文作者: 小星 Code-go
- 本文链接: https://www.cnblogs.com/lxing-go/p/17566760.html
- 关于博主: 评论和私信会在第一时间回复。或者直接私信我。
- 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
- 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。