Golang切片扩容机制(新旧版本不同)

前言

切片扩容机制,面试的一个高频考点了算是,并且经历过一次版本更新(1.17–1.18)。所以可能八股有所变动。

本文参考自:https://juejin.cn/post/7101928883280150558

老版

1、当新切片需要的容量cap大于两倍扩容的容量,则直接按照新切片需要的容量扩容;
2、当原slice容量<1024,每次翻倍。
3、大于1024,每次翻1.25倍。

在这里插入图片描述

新版

第一点保持不变:
1、当新切片需要的容量cap大于两倍扩容的容量,则直接按照新切片需要的容量扩容;

第二点的阈值修改为256,即:
2、当原slice容量<256,每次翻倍。

第三点计算规则修改:
3、当原 slice 容量 > 256,进入一个循环,每次容量增加(旧容量+3*threshold)/4。
即:每次增加:1/4的的旧容量+192。

在这里插入图片描述

在这里插入图片描述

修改原因

原有的版本,在1024之后会突变。比如9002=1800,11001.25≈1300。

在这里插入图片描述

所以这个更新会让其变得更平滑。

具体官方说明见此:https://github.com/golang/go/commit/2dda92ff6f9f07eeb110ecbf0fc2d7a0ddd27f9d

相关推荐

  1. Go切片扩容机制详解

    2024-03-26 09:56:08       49 阅读
  2. #android不同版本废弃api,api。

    2024-03-26 09:56:08       40 阅读
  3. Chromedriver安装版本时需要先卸载版本么?

    2024-03-26 09:56:08       47 阅读
  4. Golang 切片

    2024-03-26 09:56:08       59 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-26 09:56:08       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-26 09:56:08       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-26 09:56:08       82 阅读
  4. Python语言-面向对象

    2024-03-26 09:56:08       91 阅读

热门阅读

  1. Rust 的 HashMap 特定键值元素值的累加方法

    2024-03-26 09:56:08       43 阅读
  2. 007、IronPython与.NET Framework

    2024-03-26 09:56:08       35 阅读
  3. Matlab中mpower函数用法

    2024-03-26 09:56:08       45 阅读
  4. Zookeeper 的通知机制

    2024-03-26 09:56:08       48 阅读
  5. BC98 序列中删除指定数字

    2024-03-26 09:56:08       41 阅读
  6. 软件工程---专业名称

    2024-03-26 09:56:08       40 阅读
  7. ADC123123

    2024-03-26 09:56:08       42 阅读
  8. Docker与K8S实战系列教程--靠谱、易学

    2024-03-26 09:56:08       36 阅读
  9. Hadoop3的安装

    2024-03-26 09:56:08       41 阅读