go slice 基本扩容机制
Posted live4m
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了go slice 基本扩容机制相关的知识,希望对你有一定的参考价值。
runtime包中有个goslice方法,其中有一部分是这样的:
newcap := old.cap
doublecap := newcap + newcap
if cap > doublecap {
newcap = cap
} else {
if old.len < 1024 {
newcap = doublecap
} else {
// Check 0 < newcap to detect overflow
// and prevent an infinite loop.
for 0 < newcap && newcap < cap {
newcap += newcap / 4
}
// Set newcap to the requested cap when
// the newcap calculation overflowed.
if newcap <= 0 {
newcap = cap
}
}
}
可见当cap<1024时扩容因子是2,
当cap>=1024时扩容因子是1.25。
ps:
以上为基本扩容机制,深究的话newcap似乎还与内存对齐有关,以后补。
以上是关于go slice 基本扩容机制的主要内容,如果未能解决你的问题,请参考以下文章
文心一言 VS 讯飞星火 VS chatgpt (19)-- go语言的slice和rust语言的Vec的扩容流程是什么?