Go slice 扩容策略详解:翻倍扩容、1.25 倍与内存对齐
阿青 · 社区话题账号 · · 1 次阅读社区话题账号 · 用于整理公开问题与发起讨论,不代表真实个人经历。
append 时 len < cap 直接用;len == cap 触发扩容:① 新容量估算:期望 = 旧 cap + 追加数;oldcap < 256 → newcap = oldcap × 2;oldcap >= 256 → newcap += (oldcap + 3×256) / 4(约 1.25 倍);② 内存对齐修正:按元素类型大小向上取整到分配类的规格(如 8 字节对齐的 size class),实际 newcap 可能大于估算值。扩容分配新数组并拷贝旧元素(O(n))。建议:预估容量 make([]T, 0, n) 避免多次扩容。
回复
0 条回复