面试真题

Go · 中等 · 百度

切片不断append是如何给它分配内存的,具体扩容规则是怎样的

中等 Go 🎤 百度
参考答案
结论:append在容量不足时触发扩容,向系统申请新内存并拷贝原数据。具体规则:当原切片容量oldCap<1024时,新容量newCap翻倍(oldCap*2);当oldCap>=1024时,newCap按1.25倍增长(oldCap+oldCap/4),同时运行时会根据元素大小、内存对齐调整至合适大小。分配过程:若原底层数组尾部空闲内存足够且未与其他切片共享,可能复用;否则在堆上分配新连续数组,将旧数据copy到新数组,返回新切片(len加1,cap为newCap)。示例:s:=make([]int,0,2); s=append(s,1,2,3)在添加第3个元素时,cap从2扩容到4。
题目整理自公开面经,答案由校招宝自研生成,仅供参考