Golang语法系列——slice切片和数组
本文最后更新于:1 年前
slice切片底层
基于数组实现,可动态拓容,
切片拓容规则
append() 在分配内存空间之前需要先确定新的切片容量,运行时根据切片的当前容量选择不同的策略进行扩容
如果期望容量大于当前容量的两倍就会使用期望容量;
如果当前切片的长度小于 1024 就会将容量翻倍;
如果当前切片的长度大于 1024 就会每次增加 25% 的容量,直到新容量大于期望容量;
copy拷贝,runtime.memmove
能够提供更好的性能。需要注意的是,整块拷贝内存仍然会占用非常多的资源,在大切片上执行拷贝操作时一定要注意对性能的影响
总结
- append 注意拓容规则,初始化时可规划好长度
- copy 避免大切片拷贝
slice使用
slice cap分析
copy() 是值赋值,不会影响原切片cap,同时基于数组的新切片,修改新切片值,会覆盖数组的值。
1 |
|
Slice增加元素重新分配内存
slice在添加元素前,与其它切片共享同一数据区域,修改会相互影响;但添加元素导致内存重新分配之后,不再指向原来的数据区域,修改元素,不再影响其它切片。
1 |
|
参考链接
本站点所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!