专栏首页golang小白成长记golang面试题:拷贝大切片一定比小切片代价大吗?

golang面试题:拷贝大切片一定比小切片代价大吗?

问题

拷贝大切片一定比小切片代价大吗?

怎么答

并不是,所有切片的大小相同;三个字段(一个 uintptr,两个int)。切片中的第一个字是指向切片底层数组的指针,这是切片的存储空间,第二个字段是切片的长度,第三个字段是容量。将一个 slice 变量分配给另一个变量只会复制三个机器字。所以 拷贝大切片跟小切片的代价应该是一样的

解释

  • SliceHeader切片在go的底层结构。
type SliceHeader struct {
 Data uintptr
 Len  int
 Cap  int
}
  • 大切片跟小切片的区别无非就是 LenCap的值比小切片的这两个值大一些,如果发生拷贝,本质上就是拷贝上面的三个字段。

如果喜欢我的文章,可关注我的公众号:golang小白成长记

本文分享自微信公众号 - golang小白成长记(golangxbczj),作者:胖虎

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-06-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Golang 语言中数组和切片的区别是什么?

    在很多编程语言中都有数组,而切片类型却不常见。实际上,Golang 语言中的切片的底层存储也是基于数组。因为数组是固定长度的,而切片比数组更加灵活,所以在 Go...

    frank.
  • [Introduction]Go特殊的引用类型:值传递/指针传递/引用传递

    变量名本身并没有作用,只相当于代号利于程序员编程,引用作为别名本质上还是指向同一个内存地址。指针本质上占用一小段内存空间

    Wzy_CC
  • 手把手教你学Numpy【二】基本运算与切片

    上一篇文章当中曾经提到过,同样大小的数据,使用Numpy的运算速度会是我们自己写循环来计算的上百倍甚至更多。并且Numpy的API非常简单,通常只要简单几行代码...

    TechFlow-承志
  • Golang泛型编程初体验

    序言 众所周知,Golang中不支持类似C++/Java中的标记式泛型,所以对于常用算法,比如冒泡排序算法,有些同学容易写出逻辑上重复的代码,即整型是第一套代码...

    李海彬
  • Golang泛型编程初体验

    序言 众所周知,Golang中不支持类似C++/Java中的标记式泛型,所以对于常用算法,比如冒泡排序算法,有些同学容易写出逻辑上重复的代码,即整型是第一套代码...

    李海彬
  • Golang 语言怎么高效使用字符串?

    在 Golang 语言中,string 类型的值是只读的,不可以被修改。如果需要修改,通常的做法是对原字符串进行截取和拼接操作,从而生成一个新字符串,但是会涉及...

    frank.
  • 一日一技:Golang 字符串切片与 Python 列表的不同

    最近在粉丝交流群里面看到不少学 Python 的同学都在学习 Golang,那么今天我们来看一个非常基础的数据结构:Python中的列表和 Golang 中的切...

    青南
  • Go 语言入门系列:切片的应用实践

    Golang 中以标准库的方式提供了常用的容器实现,基本能够满足我们日常开发的需要。我们来具体学习下 Go 数组的使用。

    aoho求索
  • Golang之旅34-struct3

    皮大大
  • FFmpeg优化 苏宁PP体育视频剪切效率提升技巧

    苏宁旗下PP体育所在的直播行业,每天有无数视频原始数据需要进行分类存储、渲染处理。处理这些视频,一个很重要的方面,就是要将长时段的直播视频切割成不定时长,不定画...

    LiveVideoStack
  • Golang 语言的内存管理

    使用 len() 获取字符串长度,返回的是字节长度,如果想要获取 unicode 长度,需要使用 utf8 包的方法。

    frank.
  • Go语言中的数组和切片 len cap append copy

    类比c语言,一个int型数组int a[10],a的类型是int*,也就是整型指针,而c语言中可以使用malloc()动态的分配一段内存区域,c++中可以用ne...

    机智的程序员小熊
  • Go语言slice的本质-SliceHeader

    今天最热的事情,莫过于微信7.0的发布,增加了短视频,优化了看一看等功能,本来想跟着个热度,蹭个流量,后来发现各位大佬都已经开始蹭了,就算了,还是谈谈Go语言(...

    飞雪无情
  • Golang 语言 method 接收者使用值类型和指针类型的区别

    在 Golang 语言中,function 的参数和 method 的接收者都可以选择使用值传递和指针传递(“引用传递”),需要注意的是,其中指针传递是传递的指...

    frank.
  • 本周Golang复盘

    http get请求时,通常会拼接url操作,例如:http://xxx.com?code=1&time=2021-07-01 12:00:00

    公众号guangcity
  • 手把手教你做个生成静态网页的小工具:podgen

    程序人生之图穷匕见的podcast发了四期(三期正式的)后,有几个读者说在微信上听效果不好,又没法暂停(停下后再听又从头开始了),能不能在iTunes 播客里面...

    tyrchen
  • 撸起袖子加油干 golang入坑系列

    还是提醒一下,里面有段子,不都是技术。 冲着技术来的,慢走不送。没有版权,但可以给我发邮件(ztao8607@gmail.com) 在我的发小朋友中,终于最后一...

    随机来个数
  • Golang数据类型之切片

    Go中的切片slice依赖于数组,它的底层就是数组,所以数组具有的优点,slice都有。 且slice支持可以通过append向slice中追加元素,长度不够时...

    仙人技术
  • Golang 并发赋值的安全性探讨

    比如对一个变量简单的自增操作count++,在非并发下很好理解,而在并发情况下却容易出现预期之外的结果,这样的代码就是非并发安全的。

    Dabelv

扫码关注云+社区

领取腾讯云代金券