golang slice map扩容

golang slice 扩容

操作系统预分配的内存规格 byte 8 16 32 64 80 96 112…

先求出当前切片容量x,求出append追加后的容量 y

判断 x*2 和y 的关系

1

2x < y 使用y, 根据y的个数乘上切片中存储数据类型的大小,求出需要分配的内存,然后再预分配的内存规格选择一个大于的距离最近的规格,然后除以数据类型大小求出个数,即扩容后的个数

[]int x=4,y=9 ,4* 2<9, 9 *8=72, 取内存规格中的80, 80 /8 =10, 求出扩容后容量为10

2

2x>y ,判断是否个数x大于1024, 如果不大于1024, 取2x * 数据类型的大小,寻找与分配内存规格,再求出个数

[]int x =4, y=7, 4* 2 = 8 >7, 7* 8=56,取内存规格为64, 64/8=8,扩容后容量为8

如果大于1024, 先扩容 1/4,匹配内存规格,求出扩容后规格。

Map

底层采用的是hash,使用链表解决的哈希冲突

type hmap struct{
   
    count 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值