Open isayme opened 6 years ago
注: 结果可能与操作系统位数有关. 本人当前使用的操作系统 Mac Pro 64 位操作系统
搜索了相关的信息, 看到的别人总结的机制是这样的:
先不说对不对, 至少这两条规则是没有覆盖到所有场景的, 如:
s := []int{1} // cap(s) == 1 s = append(s, 2, 3, 4) // 满足 cap(s) < 1024, 如果是简单的 cap(s) * 2 = 2 都不足以容纳 `1, 2, 3, 4` 合计 4 个元素
假设: var s []int 当 cap(s) < 1024 时, 新的 size = cap(s) * 2 但实际并不完全是这样: https://play.golang.org/p/Tj4SS-gwzIS 当 cap(s) == 17 时, 结果不是 34 而是 36.
假设: var s []int
但实际并不完全是这样: https://play.golang.org/p/Tj4SS-gwzIS 当 cap(s) == 17 时, 结果不是 34 而是 36.
34
36
对于 []byte, 结果又是另一个样子: https://play.golang.org/p/4TYIMkEZmMn
[]byte
但是现在版本的growslice好像更新了,定义了一个常数threshold,默认为256,所以我很疑惑
搜索了相关的信息, 看到的别人总结的机制是这样的:
先不说对不对, 至少这两条规则是没有覆盖到所有场景的, 如:
机制
对于
[]byte
, 结果又是另一个样子: https://play.golang.org/p/4TYIMkEZmMn参考资料