首页 > 编程语言 >Golang高性能编程--slice的学习总结

Golang高性能编程--slice的学习总结

时间:2023-06-05 21:45:17浏览次数:45  
标签:切片 slice -- fmt Golang 复制 数组 底层

在go语言中,数组变量属于值类型,因此当一个数组变量被复制或者传递时,实际上会复制整个数组。eg,将a赋值给b,修改a中的元素,并不会修改b中的元素。为了避免复制数组,一般会传递指向数组的指针。

package main

import "fmt"

func main() {
	a := [...]int{1, 2, 3}
	b := a
	a[0] = 100
	fmt.Println(a)
	fmt.Println(b)
}

输出结果:
【100,2,3】
【1,2,3】

切片的底层是依赖数组实现的,相关初始化操作可以见笔者之前的博客,会有详细的介绍。切片和数组很相似,按照下标进行索引。切片本质是一个数组片段的描述,包括了数组的指针,这个片段的长度和容量(不改变内存分配情况下的最大长度)。切片操作并不复制切片指向的元素,创建一个新的切片会复用原来切片的底层数组,因此切片操作是非常高效的。

在已有切片的基础上进行切片,不会创建新的底层数组。因为原来的底层数组没有发生变化,内存会一直占用,直到没有变量引用该数组。因此很可能出现这么一种情况,原切片由大量的元素构成,但是我们在原切片的基础上切片,虽然只使用了很小一段,但底层数组在内存中仍然占据了大量空间,得不到释放。比较推荐的做法,使用 copy 替代 re-slice

 

标签:切片,slice,--,fmt,Golang,复制,数组,底层
From: https://www.cnblogs.com/99kol/p/17459003.html

相关文章

  • Spring Web 日志记录切面
    SpringWeb日志记录切面应用:在我们进行rest接口编写时需要对该接口的耗时、参数、请求路径、返回值进行对应的记录日志注解把日志封装成注解的形式可以更好的供使用者使用,同时也利于解耦合代码@Target({ElementType.TYPE,ElementType.METHOD})@Retention(RetentionPo......
  • DevOps| 研发效能和PMO如何合作共赢?
    项目经理(PMO)对于大组织、跨团队高效协同有着不可替代的作用。跳出组织架构的束缚,横向推动公司级别的大项目向前推进,跟进进展和拿到结果,PMO的小伙伴有着独特的优势。我之前写过小团队如何高效协作的一篇文章《 高效能敏捷交付团队反思:特性团队(FeatureTeam)+Scrum》,还写过一篇......
  • 判断对象是否存活的算法
    需要回收的位置如下 其实垃圾回收是jvm自带的功能,所以有了如下的优缺点优点:1.项目开发的时候不需要开发人员考虑内存管理2.可以有效的防止内存泄漏,更加高效的利用可使用的内存3.因为垃圾回收不再有了作用于的概念缺点:因为不了解所以使用过程中会出现内存溢出和内存泄漏的......
  • -> 函数返回值注解符号
    ->出现在python函数定义的函数名后面,为函数添加元数据,描述函数的返回类型->函数返回值注解符号defadd(x,y)->int:#返回值注解表明了函数的返回值为int类型returnx+y......
  • 顺序表 与 链表 的优缺点比较涅~( ̄▽ ̄)~*
    顺序表  优点是可以随机存取元素,存储密度高,结构简单;        缺点是需要一片地址连续的存储空间,不便于插入和删除元素(因为插入需要将大量的元素向后移动,删除需要将后续大量的元素向前覆盖),表的容量难以确定; 链表   优点是便于结点的插入与删除(只需要修......
  • 计算机网络-----数据链路层
    《数据链路层的几个共同问题》《差错检测》 《点对点协议PPP》《解决!ppp中的透明传输问题》在PPP协议中帧的标志字段(表示一个帧的开始或结束)为0x7E(01111110)转义字符为0x7D(01111101)方法一:字节填充,适合于异步传输时(1)数据字段遇到标志字段的编码则将0x7E->......
  • 大数据分析--南瓜籽品种分类
    大数据分析--南瓜籽品种分类 1.选题背景南瓜籽为南瓜的种子,葫芦科南瓜属植物南瓜CucurbitamoschataDuch.的种子。一端略尖,外表黄白色,边缘稍有棱,表面带有毛茸。除去种皮,可见绿色菲薄的胚乳,具有健脑提神、降压镇痛、驱虫等功效。南瓜籽因其含有足量的蛋白质、脂肪、碳水化合物......
  • ChatGpt玩法(一):prompt使用的重要性
    前言登录https://www.topgpt.one即可免费体验ChatGPT带来的强大魅力。ChatGpt是一个强大的自然语言处理工具,可以用于多种任务,如文本生成、问答系统以及对话生成等等。其中,prompt是ChatGpt中非常重要的概念,它是指用户输入的“提示词”,可以帮助模型更好地理解用户的意图和需求。......
  • 使用Node.js搭建的微服务器基本流程
    前言使用Node.js搭建的微服务器,处理注册登录操作的流程详解。主要包括注册,登录两大模块。Node.js项目的搭建基于Express框架mongodb数据库搭建的Web服务器基本配置1.初始化Node.js项目`npminit`2.项目目录结构3.项目结构介绍config:保存项目一些公共的配置db......
  • 使用Getdata软件抓取曲线数据
    1.打开Getdata,点击“File”--->“OpenImage”注:图片格式尽量为jpg,当然tifbmppcx也可以。2.定义x,y坐标光标点原点--->右击--->"SetXmin"--->设置Xmin值(这里我随便取的,如果要修改,可以:“Operations”--->“Adjustthescale”)或者直接点击小图标。光标点x末......