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 基本扩容机制的主要内容,如果未能解决你的问题,请参考以下文章

go常见问题

go常见问题

文心一言 VS 讯飞星火 VS chatgpt (19)-- go语言的slice和rust语言的Vec的扩容流程是什么?

Go切片实现

Go | Slice 及扩容规则

Go | Slice 及扩容规则