扩容原则:
当slice的数据长度小于容量一半时,不扩容,反之,则容量扩大为原来的2倍
-
1.如果 L + n < c 时,这时slice不需要扩容,(参考源码 tryGrowByReslice 函数)
-
2.当 L+n >= c 时, (参考源码 grow(n) 函数)需要分两种情况讨论
-
2.1 如果写入数据之后buffer的长度小于slice容量的一半时 ,也就是m+n < c/2 时,
此时我们用copy移动一下buffer的数据,再更新读的偏移量即可
- 2.2 如果写入数据之后buffer的长度大于等于slice容量的一半时 ,也就是m+n >= c/2 时,此时需要两步
- 2.2.1.扩大原来slice 的容量
如果只是简单地将容量由c扩容至2c ,
此时m+n >= c/2 ,有可能出现m+n >c 的情形,由于m < 2c ,则必有m+n < 2c +n ,
所以我们只要将容量扩容至n+2c 即可满足要求 - 2.2.2 用copy移动一下buffer的数据,再更新读的偏移量即可