当前位置: 首页 > news >正文

golang中slice的扩容机制

文章目录

  • 简介
  • 结论
  • 关于 len & cap
  • 关于 cap 扩容

简介

slice 是 golang 中的数组切片,可以理解成是一种动态数组,一般通过 make 声明时候,会指定其 len 和 cap。一般我们常常使用 append 函数时候当 len 超过 cap 时候就会进行扩容处理

结论

我们先说结论

  • 当所需容量 cap 大于原先容量 cap 的 2 倍,则最终申请 cap 容量为当前所需容量
  • 当所需要容量 cap 没有大于原先容量 cap 2 倍时,且若原切片长度 len 小于 1024 时候,最终申请容量 cap 为原先容量 2 倍,否则最终申请容量 cap 的计算方式为:cap 每次增加 1/4 的容量,直到大于新容量大小时为止,最后判定新容量是否溢出,若溢出最终申请的容量即为最终容量

关于 len & cap

下面这段代码,最后输出结果是 2 和 4,也就是说从数组切出来的切片,其 len 是真实长度,但是其容量仍然表示原数组容量

func main() {arr := [4]int{1, 2, 3, 4}sli := arr[0:2]// 2 和 4fmt.Println(len(sli), cap(sli))
}

关于 cap 扩容

多数情况下,我们的原切片长度 len 是小于 1024 的,所以我们会遇见下面情形的代码。下面代码最新输出是 5 和 8,明显可以发现因为 len < 1024,然后 cap 从原来容量直接变成了 2 倍值

func main() {arr := [4]int{1, 2, 3, 4}sli := arr[0:2]// 4 和 4fmt.Println(len(sli), cap(sli))// 需要扩容了sli := append(sli, 5)// 5 和 8fmt.Println(len(sli), cap(sli))
}

那如果 len 本身就是 1024 再扩容呢?我们看看下面代码。我们知道 make 时候 sli 的 len 为 1024 并且 cap 为 1024,但是扩容一次之后发现,len 变成了 1025,但是 cap 变成了 1280,为什么是 1280 呢?因为 len 已经是 1024 了,所以扩容后,容积需要增加 1/4,容积增加 1/4 且新 cap 没有溢出,所以 cap 就从 1024 就变成 1280 了

func main() {sli := make([]int, 1024, 1024)sli = append(sli, 1)// 1025 和 1280fmt.Println(len(sli), cap(sli))
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.exyb.cn/news/show-35507.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

Spring框架的入门知识点

一、概念 1.一款轻量级的JAVAEE解决方案&#xff0c;众多优秀设计模式的组合&#xff1b; 2.作用&#xff08;目的&#xff09;&#xff1a;解耦合&#xff0c;目的是为了解决企业级应用开发的业务逻辑层和其他各层的耦合问题。 3. Spring 的核心思想是&#xff1a; IOC:控制…...

实现批量自动部署Linux操作系统--UP楠哥

#实战描述&#xff1a; UPWEN公司所服务的用户IT环境中有很多的Linux系统&#xff0c;品种也五花八门&#xff0c;有RHEL、Centos、OpenSUSE甚至还有测试环境使用的RockyLinux。当有大量的计算机需要同时安装操作系统需求的时候&#xff0c;如果通过光驱的方式一个个安装&#…...

HDU 1536 S-Nim

1536 #include<bits/stdc.h> using namespace std; int s[110],sg[10010]; int k; int SG(int x){if(sg[x]!-1)return sg[x];bool vis[110];memset(vis,0,sizeof(vis));for(int i0;i<k;i){if(x>s[i]){SG(x-s[i]);vis[sg[x-s[i]]]1;}}for(int i0;;i){if(!vis[i]){...

Redis 内存淘汰机制

Redis 内存淘汰机制 【问题一】 过期字典的方法很好&#xff0c;但还是有可能会出问题。因为定期删除和惰性删除还是有可能造成大量过期的 key 没被删除&#xff0c;堆积在内存中。非常容易就 内存溢出了 Out of memory。 【问题二】 如何保证 Redis 中的数据都是热点数据 &am…...

2021年Java开发爆款推荐!docker部署tomcat

一.java基础面试知识点 java中和equals和hashCode的区别 int、char、long各占多少字节数 int与integer的区别 探探对java多态的理解 String、StringBuffer、StringBuilder区别 什么是内部类&#xff1f;内部类的作用 抽象类和接口区别 抽象类的意义 抽象类与接口的应用…...

常见各类算法

冒泡&#xff1a; 1、依次比较相邻的元素&#xff0c;如果第一个比第二个大&#xff0c;则交换位置&#xff1b; 2、从第一个交换到最后一个时&#xff0c;最后的元素一定是最大的&#xff1b; 3、然后对所有的元素都执行此操作O(n^2)快排&#xff1a; 1、选择一个基准&#…...

错题小笔记13——序列化、serialVisionUID的作用

序列化&#xff1a;将数据结构转换称为二进制数据流或者文本流的过程。序列化后的数据方便在网络上传输和在硬盘上存储。 反序列化&#xff1a;是将二进制数据流或者文本流转换称为易于处理和阅读的数据结构的过程。本质其实还是一种协议&#xff0c;一种数据格式&#xff0c;…...

HTTP与HTTPS的区别

HTTP与HTTPS的区别 HTTP &#xff08;HyperText Transfer Protocol&#xff1a;超文本传输协议&#xff09; HTTP&#xff08;HyperText Transfer Protocol&#xff1a;超文本传输协议&#xff09;是一种用于分布式、协作式和超媒体信息系统的应用层协议。 简单来说就是一种发…...

贝叶斯分类器

贝叶斯理论 连续、离散特征处理 朴素贝叶斯分类器 半朴素贝叶斯分类器 贝叶斯理论 在我们学习概率论课程中&#xff0c;基本上处处暗含着贝叶斯理论的身影。贝叶斯理论简单说可以是一种概率转化的方法&#xff0c;将一种较难求得的相关概率转化为几个较容易求得的概率乘积…...

阿里P8大牛亲自讲解!java静态变量和实例变量

Redis主从复制 概念 Redis的主从复制概念和MySQL的主从复制大概类似。一台主机master&#xff0c;一台从机slaver。master主机数据更新后根据配置和策略&#xff0c;自动同步到slaver从机&#xff0c;Master以写为主&#xff0c;Slave以读为主。 主要用途 读写分离&#xff1…...

5. 断路器hystrix dashboard turbine

hystrix使用 feign中使用 hystrix feign:hystrix:enabled: true #必须配置Component public class EurekaClientHystrix implements EurekaClientFeign{}使用feign配置了&#xff0c;这些&#xff0c;即可进行回退 Feign 的起步依赖中已经包含Hystrix依赖&#xff0c;所以只…...

使用朴素贝叶斯过滤垃圾邮件

示例&#xff1a;使用朴素贝叶斯对电子邮件进行分类(1) 收集数据&#xff1a;提供文本文件。(2) 准备数据&#xff1a;将文本文件解析成词条向量。 (3) 分析数据&#xff1a;检查词条确保解析的正确性。(4) 训练算法&#xff1a;使用我们之前建立的trainNB0()函数。(5) 测试算法…...

Angular中NgOnInit和Constructor方法之间的主要区别

参考链接&#xff1a;https://chudovo.com/main-differences-between-ngoninit-and-constructor-methods-in-angular/...

redis中的RDB和AOF

redis提供两种方式进行持久化&#xff0c;一种是RDB持久化&#xff08;原理是将Reids在内存中的数据库记录定时dump到磁盘上的RDB持久化&#xff09;&#xff0c;另外一种是AOF持久化&#xff08;原理是将Reids的操作日志以追加的方式写入文件&#xff09;。那么这两种持久化方…...

阿里云泄露信息、腾讯视频崩了,抖音使用IPFS存储!IPFS将开启一个更安全的互联网存储时代!

西部世界XLMidsummer了解到&#xff0c;近日&#xff0c;网络流传一份浙江省通信管理局7月5日对投诉人的答复函&#xff0c;核实称此前阿里云计算有限公司未经用户同意擅自将用户留存在的注册信息泄露给第三方合作公司。8月23日&#xff0c;浙江省通信管理局相关负责人独家回应…...

djanog导出csv文件

def xlsx_response(x_io):res HttpResponse()res["Content-Type"] "text/csv"res["Content-Disposition"] filename"aa.xlsx"res.write(x_io.getvalue())return resif query_params.get(export):values_list_order queryset.valu...

post与get请求的区别以及转发和重定向的区别

post 与get请求的额区别 比较角度GETPOST请求的数据是否在url上显示会 url?参数名参数值&#xff08;不安全&#xff09;不会 在Form Data中&#xff08;安全&#xff09;是否是表单的默认提交方式是不是执行效率高低&#xff08;相对于GET&#xff09;提交数据大小最大是102…...

弘辽科技:成为拼多多商家要什么要求?收费吗?

现在也有不少人想要入驻拼多多&#xff0c;但是想要成为拼多多的商家也需要满足对应的要求&#xff0c;同时也想要了解成为拼多多商家是否需要收费&#xff0c;我马上就来给各位卖家们介绍。 拼多多商家入驻平台分四种店铺&#xff0c;这里小编介绍一下旗舰店、专营店入驻基本条…...

Xshell中鼠标选中内容自动换行ctrl+c解决办法

之前一直使用xshell来调试嵌入式终端&#xff0c;觉得蛮好用的&#xff0c;在昨天&#xff0c;突然发现&#xff0c;莫名的就出现ctrlc的命令&#xff0c;经分析&#xff0c;当使用鼠标选中内容后就自动出现&#xff0c;仔细思考这一两天的过程&#xff0c;并没有得到好的信息&…...

超11万字整理完k8s的核心组件pod全部功能详解,理论代码超详细,建议跟着做一遍实验【含 label 标签使用】【1】

文章目录说明【必看】第二篇文章标题和链接第二篇文章标题和链接第三篇文章标题和链接创建及删除pod创建一个pod-1的文件夹和命名空间镜像准备【node节点执行】创建pod【虚拟机】方式1&#xff1a;命令行的方式【不建议】默认创建加imagePullPolicy参数创建说明方式2&#xff1…...

Unable to find instance for XXXX

当你的控制台报了这样的错误 这就是请求的后端服务没启动&#xff0c;联系后端启动后端就行。...

如何html css完成分层金字塔

近期才通过自学了html和css&#xff0c;今日恰好做一个金字塔实例&#xff0c;能够清晰的看得出标志数据信息&#xff0c;必须 的朋友们下边伴随着小编来一起学习学习吧 文中关键详细介绍了html css完成分层次金字塔的实例&#xff0c;共享给大伙儿&#xff0c;实际以下&#…...

学习AlibabaCloud

学习AlibabaCloud一、Maven聚合工程创建1、pom依赖一、Maven聚合工程创建 1、pom依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema…...

Android Studio Android Device Monitor打开

环境 Android Studio 4.1 for Windows 打开方法 想查看虚拟机中应用生成的文件在之前的Android Studio本版有个工具Android Device Monitor&#xff0c;在网上查看发现已经被弃用了。 打开方法可以参照CSDN Android Studio的Android Device Monitor在哪儿&#xff1f;&#x…...

Typora+Gitee+PicGo上传图片功能

TyporaGiteePicGo上传图片功能 建立Gitee图床 注册登录Gitee账号 这里就不详细讲了 官方地址&#xff1a;https://gitee.com/ 新建仓库当图床 输入下图中仓库名称、路径、选择开源&#xff0c;点击创建。 这样我们就创建了一个Typora_image的仓库&#xff0c;用来保存Typor…...

实训三#3.2导弹防御系统

【问题描述】 某国为了防御敌国的导弹袭击&#xff0c;开发出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷&#xff1a;虽然它的第一发炮弹能够到达任意的高度&#xff0c;但是以后每一发炮弹都不能高于前一发的高度。某天&#xff0c;雷达捕捉到敌国的导弹来袭&#xf…...

顶刊两天两篇!华中科技大学团队研究成果又登《科学》!

xx团队研究成果又登《科学》&#xff01;顶刊两天两篇&#xff01;华中科技大学团队研究成果又登《科学》&#xff01;顶刊两天两篇&#xff01;华中科技大学团队研究成果又登《科学》&#xff01; 8月19日&#xff0c;《科学》Science在线发表了华中科技大学光电信息学院/武汉…...

Mysql字符串截取 mysql将字符串字段转为数字排序或比大小

SELECT * FROM Student WHERE 1 1 ORDER BY -ID DESC ; SELECT * FROM Student WHERE 1 1 ORDER BY (ID 1); mysql将字符串字段转为数字排序或比大小 2017年09月17日 01:36:31 阅读数&#xff1a;6566 版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得…...

设计模式----设计原则

设计原则...

非常详细的NumPy教程(转载)

转载自https://www.jianshu.com/p/57e3c0a92f3a NumPy - 简介 NumPy 是一个 Python 包。 它代表 “Numeric Python”。 它是一个由多维数组对象和用于处理数组的例程集合组成的库。 Numeric&#xff0c;即 NumPy 的前身&#xff0c;是由 Jim Hugunin 开发的。 也开发了另一个…...

dbc2000 注册机|dbc2000 注册码注册机下载

点击下载来源&#xff1a;dbc2000 注册机 dbc2000 注册机是同名源程序软件的注册机软件&#xff0c;该源程序软件是一款应用于数据库搭建以及数据写入的数据库架设工具&#xff0c;它拥有强大的数据写入功能&#xff0c;在作为应用程序使用时&#xff0c;它不仅可以充当数据属性…...

秋招面经第八弹:网易二面-数据开发工程师

秋招第八弹&#xff1a;网易二面-数据开发工程师 写在最前&#xff1a;秋招以来一直在冲&#xff0c;因为事情比较多&#xff0c;对于笔试面试一直没有复盘&#xff0c;现在靠仅存的记忆把面试的一些问题记录下来&#xff0c;尽可能记录出能回忆到的问题&#xff0c;但可能记的…...

安卓课程格子APP

https://download.csdn.net/download/weixin_57836618/73810452 功能演示&#xff1a; 查看所有课程 点击主页面空白处即可添加课程 添加课程之后查看课程 查看双周课程 查看单周课程 6.查看课程详情...

强化学习——格子世界

强化学习——格子世界 项目源码地址&#xff1a;https://gitee.com/infiniteStars/machine-learning-experiment 1. 实验内容 2. 实验代码 import numpy as np import matplotlib.pyplot as plt from matplotlib.table import Table from xml.dom.minidom import Document #手…...

华为机试 - 跳格子游戏

目录 题目描述 输入描述 输出描述 用例 题目解析 算法源码 题目描述 地上共有N个格子&#xff0c;你需要跳完地上所有的格子&#xff0c;但是格子间是有强依赖关系的&#xff0c;跳完前一个格子后&#xff0c;后续的格子才会被开启&#xff0c;格子间的依赖关系由多组st…...

php 爬课程表信息,Ruby爬取教务系统生成课程表

我为什么要虐自己最近觉得课程格子广告越来越多&#xff0c;乱七八糟的东西越来越多&#xff0c;完全失去了一开始的存在价值&#xff0c;并且没有电脑端app&#xff0c;想查看课程必须拿出手机&#xff0c;而我使用电脑频率要比手机高&#xff0c;所以才有了折腾的动力。于是我…...

android 课程表 ui,UICollectionViewLayout实现课程表布局

因为项目中有课程表的相关模块&#xff0c;第一时间想到用UICollectionView。然而后期的需求越来越复杂&#xff0c;每个格子需要展示的内容越来越多&#xff0c;所以不得不寻找合适的解决方案。最后发现自定义UICollectionViewLayout可以实现我的需求。先放效果图&#xff1a;…...

Android自定义View课程表,Android 自定义View课程表表格

自己闲下来时间写的一个课表控件使用的自定义LinearLayout 里面View都是用代码实现的 最终效果如下图 写的可能有问题希望多多指点创建一个自定义LinearLayout 控件用来装载课程的信息和课程的周数 和节数大概的布局三这样的根据上面的看来觉得总体布局我分了两个 上面的星期是…...

java课程设计设计_java课程设计

1. 团队课程设计博客链接https://www.cnblogs.com/choco1ate/p/12172223.html2.本组课题及本人任务本组课题&#xff1a;泡泡堂(炸弹人)游戏本人任务&#xff1a;Box类(游戏地图中的每个方格)Bomb类(游戏过程中的)游戏玩家输赢信息的文件储存3.需求分析Box类&#xff1a;该类为…...

《课程格子》的一个笔试题目

题目如下&#xff0c;感觉很适合喜欢琢磨的程序员&#xff0c;也是考验你编码风格的时候。 Lets make a tower defense game&#xff08;塔防游戏):1. You have 1 tower, with H health and D dps(damage per second).2. There are n attackers, each with h_i health and d_i …...

Android仿照超级课程表 or 课程格子 一键提取课表功能(方正系统)

参考文章http://blog.csdn.net/sbsujjbcy ,本文仿照‘ 安卓弟 提供的android 项目实战——打造超级课程表一键提取课表功能文章&#xff0c;对他的代码进行了修改和补充&#xff0c;为什么要修改呢&#xff1f;原因是安卓弟的那个源码版本过于老旧&#xff0c;很多方法已经过…...

七个免费邮件服务器软件

目前邮件是企业的工作要件之一,而很多企事业是没有这方面的大预算,所以好的免费邮箱服务器还是很必要的. 以下就推荐几个不错的.(比较看好hmailserver|extmail) hMailServer hmailserver是一个免费的win下的邮件服务器,类似于国内的winmail的管理界面只是没有中文不过可以找到网…...

4款免费邮件服务器软件

4款免费邮件服务器软件、。 Macallan Mail Solution Macallan Mail Solution 是一款 POP3 、IMAP、SMTP、HTTP (webMail) 邮件服务器软件 &#xff0c;它还包括了防垃圾邮件机制。MMS 免费邮件服务器 (SMTP/POP3/IMAP/HTTP/NEWS/SSL/Tunnel) 支持 Microsoft Windows XPTM 和 …...

邮件服务器

什么是邮件服务器&#xff1f; 电子邮件是一种利用网络传递信息给远程服务器的信息传递行为。我们可以将文件或信息传送到地球上任何一个有网络的地方&#xff0c;我们也可以在任何有网络的地方连上internet去收取邮件。但是其中也存在一些问题&#xff1a; 1、夹带病毒的电子…...

winmail邮件服务器的搭建,搭建Winmail邮件系统

在实验之前我们来了解 Winmail一些基础知识Winmail mail server 概述&#xff1a;Winmail mail server是安全易用全功能的邮件服务器软件&#xff0c;不仅支持SMTP、ESMTP、POP3、IMAP、Webmail、LDAP(公用地址簿)、多域、发信认证、反垃圾邮件、邮件过滤、邮件组、公共邮件夹等…...

分享几个免费的开源邮件服务器软件

由于企业的需要&#xff0c;我们很可能需要架设一个邮件服务器&#xff0c;微软的Exchange太复杂&#xff1f;GOOGLE出来的又收费&#xff01;头大了吧,下面则有一些开源免费的邮箱服务器软件。 hMailServer hmailserver是一个免费的win下的邮件服务器,类似于国内的winmail的…...

Qt---赫尔辛基的年度气温表

...

Linux 系列之一 Linux 简介

1 Linux概述 1.1 操作系统简介 1.1.1 为啥需要操作系统呢 ? ​ 计算机是一台机器&#xff0c;它按照用户的要求接收信息、存储数据、处理数据&#xff0c;然后再将处理结果输出&#xff08;文字、图片、音频、视频等&#xff09;。计算机由硬件和软件组成&#xff1a; 硬件…...

Linux编程基础:第一章初识Linux课后习题及自我总结

一、填空题 1、Linux操作系统的核心程序由芬兰赫尔辛基大学的一名学生&#xff08;Linus Torvalds&#xff08;林纳斯托瓦兹&#xff09;&#xff09;编写。 [自我总结]Linux&#xff0c;全称GNU/Linux&#xff0c;是一种免费使用和自由传播的类UNIX操作系统&#xff0c;其内核…...

Linux-简介篇

什么是Linux Unix Unix是一个强大的多用户、多任务操作系统。 于1969年在AT&T的贝尔实验室开发。 UNIX的商标权由国际开放标准组织&#xff08;The Open Group&#xff09;所拥有。 UNIX操作系统是商业版&#xff0c;需要收费&#xff0c;价格比Microsoft Windows正版要贵…...