go语言中切片的扩容机制是什么?

提问者:帅平 问题分类:面试刷题
go语言中切片的扩容机制是什么?
1 个回答
不长发及腰
不长发及腰
go语言1.8以前的版本切片扩容机制是:
如果当前容量小于1024,则判断所需容量是否大于原来容量2倍,如果大于,当前容量加上所需容量;否则当前容量乘2。
如果当前容量大于1024,则每次按照1.25倍速度递增容量,也就是每次加上cap/4。
1.8及以后版本的切片扩容机制是:
Go1.18不再以1024为临界点,而是设定了一个值为256的threshold,以256为临界点;超过256,不再是每次扩容1/4,而是每次增加(旧容量+3*256)/4;
当新切片需要的容量cap大于两倍扩容的容量,则直接按照新切片需要的容量扩容;
当原 slice 容量 < threshold 的时候,新 slice 容量变成原来的 2 倍;
当原 slice 容量 > threshold,进入一个循环,每次容量增加(旧容量+3*threshold)/4。
发布于:1个月前 (08-05) IP属地:美国
我来回答