咖啡伴侣

呆在上海
posts - 163, comments - 156, trackbacks - 0, articles - 2

golang slice Append

Posted on 2013-11-05 16:39 oathleo 阅读(4502) 评论(0)  编辑  收藏 所属分类: Golang
s2 := append(s1, *)

切片s1上记录的切片信息复制给s2,

1.如果s1指向的底层array长度不够,append的过程会发生如下操作:内存中不仅新开辟一块区域存储append后的切片信息,而且需要新开辟一块区域存储底层array(复制原来的array至这块新array中),最后再append新数据进新array中,这样,s2指向新array。

2.如果s1指向的底层array长度够,
s2和s1指向同一个array,append的结果是内存中新开辟一个区域存储新切片信息。

开辟一块区域存储底层array 使用下面的策略:
1.如果 增加的 len < s的cap 则 新s的cap*2
2.如果 增加的 len > s的cap 则 新s的cap = 老cap + 增加数据的 len

只有注册用户登录后才能发表评论。


网站导航: