11
2020
04

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

如果切片的容量小于1024个元素,那么扩容的时候slice的cap就在当前容量的基础上翻番,乘以2;一旦元素个数超过1024个元素,增长因子就变成1.25,即每次增加当前容量的四分之一。


如果扩容之后,还没有触及原数组的容量,那么,切片中的指针指向的位置,就还是原数组,如果扩容之后,超过了原数组的容量,那么,Go就会开辟一块新的内存,把原来的值拷贝过来,这种情况丝毫不会影响到原数组。


即大致可以表述如下:


当向切片中添加数据时,如果没有超过容量,直接添加,如果超过容量,自动扩容(成倍增长)


当超过容量,切片指向的就不再原来的数组,而是内存地址中开辟了一个新的数组.

« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。