slice的预留分配空间
通过 append
对数组进行追加的时候,并不是会直接分配内存扩容。而是会先检查是否存在预留分配空间,有的话可以直接往里写入,当预留分配空间使用完后,会进行扩容。
事实上很难预估数组使用的最大长度,所以golang遵循扩容规则:
- 元素小于1024,则直接double,直至满足
- 元素大于1024,则单次扩容1.25倍,即四分之一,直至满足
slice的切片机制
切片[]int
和数组[3]int
,是不同的数据结构
在切片中,包含指向数组的指针,当前长度及容量。在没有扩容的前提下,对切片进行修改会影响原组数
但是通过append
对切片进行操作导致长度超过容积时,会发生扩容,复制原组数的值重新创建新的数组,此时,新数组和原数组互不影响
有疑问加站长微信联系(非本文作者)