美文网首页
slice扩容

slice扩容

作者: 草莓2020 | 来源:发表于2021-12-24 09:58 被阅读0次

原文:【Golang】slice类型存什么?make和new?slice和数组?扩容规则?_哔哩哔哩_bilibili

第一步:预估扩容后的容量newCap

image.png

第二步:newCap个元素需要多大内存

所需内存 = 预估容量 * 元素类型大小,

第三步:匹配合适的内存规格

这里并不是直接分配所需内存容量的大小。
这是因为在许多编程语言中,申请分配内存并不是与操作系统交涉,而是和语言自身实现的内存管理模块,它会提前向操作系统申请一批内存,分成常用的规格管理起来,我们申请内存是,它会帮我们匹配到足够大且最接近的规格

image.png

示例1

ints:=[]int{1,2} // 扩容前容量oldCap=2
ints=append(ints,3,4,5) // 至少要扩容到cap=5

第一步:预估newCap

2*2=4<5 (oldCap * 2 < cap)
所以newCap=5

第二步:预估内存

newCap * 8 = 5 * 8byte = 40byte (所需内存 = 预估容量 * 元素类型大小)

第三步 匹配合适内存

假设内存管理模块 申请的内存规格有8,16,32,48,64,...
那么实际会分配到48byte内存

示例2

image.png

相关文章

  • 【golang】slice必知必会

    slice数据结构 slice扩容逻辑 1.如果slice容量足够容纳新增的元素,那么不会扩容。2.如果新增元素后...

  • Go的slice扩容不是全部都按照1.25扩容的,还有内存对齐的

    Go的slice扩容机制-公粽号:堆栈future扩容说实话,我看到别的文章中说slice的扩容很简单,小于102...

  • Go语言学习七:slice

    1. slice 扩容机制 如果 Slice 要扩容的容量大于 2 倍当前的容量,则直接按想要扩容的容量来 new...

  • slice扩容

    原文:【Golang】slice类型存什么?make和new?slice和数组?扩容规则?_哔哩哔哩_bilibi...

  • Go slice扩容深度分析(来自掘金文章)

    Go slice扩容深度分析 本文主要是对go slice的扩容机制进行了一些分析。环境,64位centos的do...

  • 切片Slice

    切片 slice的内存分析和扩容 超出容量之后扩容会改变切片底层引用的数组的地址,每次扩容成倍扩容 在已有数组上直...

  • go slice 扩容

    简单总结 1 append后cap超过当前cap的2倍,则采用append后的cap作为cap2 append后c...

  • Slice 扩容机制解惑

    大家都知道slice扩容机制,在切片长度小于1024时会扩容为原来的2倍,超过1024扩容为原来的1.25倍。其实...

  • go之slice

    slice中文切片的意思,是go独有的类型,底层是数组,可以很方便的进行截取,也支持扩容、拷贝操作 slice 创...

  • Golang Slice扩容示例

    写个小demo来看看通过生成切片append扩容后发生了什么 打印信息如下 第一步我们创建了一个长度容量为5的sl...

网友评论

      本文标题:slice扩容

      本文链接:https://www.haomeiwen.com/subject/ecklqrtx.html