Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >golang面试题:拷贝大切片一定比小切片代价大吗?

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

作者头像
9号同学
发布于 2021-03-04 07:10:06
发布于 2021-03-04 07:10:06
89000
代码可运行
举报
运行总次数:0
代码可运行

问题

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

怎么答

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

解释

  • SliceHeader切片在go的底层结构。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type SliceHeader struct {
 Data uintptr
 Len  int
 Cap  int
}
  • 大切片跟小切片的区别无非就是 LenCap的值比小切片的这两个值大一些,如果发生拷贝,本质上就是拷贝上面的三个字段。

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 golang小白成长记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Go语言切片面试真题8连问
切片是对数组的抽象,因为数组的长度是不可变的,在某些场景下使用起来就不是很方便,所以Go语言提供了一种灵活,功能强悍的内置类型切片("动态数组"),与数组相比切片的长度是不固定的,可以追加元素。切片是一种数据结构,切片不是数组,切片描述的是一块数组,切片结构如下:
Golang梦工厂
2022/07/11
6890
Go语言切片面试真题8连问
Golang 语言中数组和切片的区别是什么?
在很多编程语言中都有数组,而切片类型却不常见。实际上,Golang 语言中的切片的底层存储也是基于数组。因为数组是固定长度的,而切片比数组更加灵活,所以在 Golang 语言中,数组使用的并不多,切片使用更加广泛。
frank.
2021/04/16
5230
Golang切片与实现原理
array是切片用来存储数据的底层数组的指针,len为切片中元素的数量,cap为切片的容量即数组的长度
Orlion
2024/09/02
810
Golang切片与实现原理
golang面试题:字符串转成byte数组,会发生内存拷贝吗?
字符串转成切片,会产生拷贝。严格来说,只要是发生类型强转都会发生内存拷贝。那么问题来了。 频繁的内存拷贝操作听起来对性能不大友好。有没有什么办法可以在字符串转成切片的时候不用发生拷贝呢?
9号同学
2021/03/04
1.5K0
[]byte与string的两种转换方式和底层实现
对小许公众号点了关注的朋友,应该都看过小许之前的文章《fasthttp是如何做到比net/http快十倍的》,相信你们还对极致的优化方式意犹未尽。
小许code
2024/03/25
3791
[]byte与string的两种转换方式和底层实现
Go通关18:SliceHeader,slice 如何高效处理数据?
示例中变量 a1 的类型是 [1]string,变量 a2 的类型是 [2]string,因为它们大小不一致,所以不是同一类型。
微客鸟窝
2021/08/18
6181
Go常见错误集锦之slice数据结构问答
其中指定了两个角色,渔夫子和百晓生。渔夫子是Go学堂的老先生,百晓生是Go学堂的小学童。
Go学堂
2023/01/31
3190
Golang-optimization「2」: 字符串
本系列的第二个部分,本文来谈谈程序员们喜闻乐见的string在Golang中有哪些值得注意的优化点
Kevinello
2022/11/17
3640
Golang-optimization「2」: 字符串
go语言中的切片有哪些坑
go语言中,切片的底层是动态数组,相对长度固定的数组,使用非常广泛,犹如java界的java.util.ArrayList(都是非线程安全),但是切片在使用过程中有几个地方需要我们开发者注意。
崔认知
2023/09/05
3960
go语言中的切片有哪些坑
Go语言slice的本质-SliceHeader
今天最热的事情,莫过于微信7.0的发布,增加了短视频,优化了看一看等功能,本来想跟着个热度,蹭个流量,后来发现各位大佬都已经开始蹭了,就算了,还是谈谈Go语言(golang)吧,看来要成为一个合格的自媒体,还是不要矜持,任重道远啊。
飞雪无情
2020/02/10
7710
Go 语言之父详述切片与其他编程语言数组的不同
切片是Go 语言核心的数据结构,然而刚接触 Go 的程序员经常在切片的工作方式和行为表现上被绊倒。比如,明明说切片是引用类型但在函数内对其做的更改有时候却保留不下来,有时候却可以。究其原因是因为我们很多人用其他语言的思维来尝试猜测 Go 语言中切片的行为,切片这个内置类型在 Go 语言底层有其单独的类型定义,而不是我们通常理解的其他语言中数组的概念。
KevinYan
2020/02/26
1.1K0
100天精通Golang(基础入门篇)——第11天:深入解析Go语言中的切片(Slice)及常用函数应用
本文是《100天精通Golang(基础入门篇)——第11天:切片(Slice)》,将详细介绍切片的概念、语法、修改、以及len()、cap()、append()和copy()函数的使用。读者将通过学习本文深入了解Golang中切片的使用方法和常用函数的功能。
猫头虎
2024/04/08
1640
100天精通Golang(基础入门篇)——第11天:深入解析Go语言中的切片(Slice)及常用函数应用
问道Golang,6月龄必知必会(二)
值类型包括:所有integer、所有float、bool、string、数组和structure
有态度的马甲
2023/04/27
2310
问道Golang,6月龄必知必会(二)
【Go】深入剖析slice和array
array 和 slice 看似相似,却有着极大的不同,但他们之间还有着千次万缕的联系 slice 是引用类型、是 array 的引用,相当于动态数组, 这些都是 slice 的特性,但是 slice 底层如何表现,内存中是如何分配的,特别是在程序中大量使用 slice 的情况下,怎样可以高效使用 slice? 今天借助 Go 的 unsafe 包来探索 array 和 slice 的各种奥妙。
thinkeridea
2019/11/04
4830
【Go】深入剖析slice和array
Go slice扩容N连问
后面的参数必须为 指针类型,否则IDE会有提示,运行后打出来的是%!p(int=0)
fliter
2023/09/05
3480
Go slice扩容N连问
go切片
使用 make 关键字创建切片时,很多工作都需要运行时的参与;调用方必须在 make 函数中传入一个切片的大小以及可选的容量,cmd/compile/internal/gc.typecheck1 会对参数进行校验:
Michel_Rolle
2023/11/05
2.6K0
Go 函数的 Map 型参数,会发生扩容后指向不同底层内存的事儿吗?
最近跟同事做项目,由于要在函数里向一个 Map 中写入不少数据,这个 Map 是作为参数传到函数里的。他问了我一个问题: “如果把 Map 作为函数参数传递,会不会像用 Slice 做参数时一样诡异,是不是一定要把 Map 当成返回值返回才能让函数外部的 Map 变量看到这里添加的数据”?
KevinYan
2022/04/06
9380
Go 函数的 Map 型参数,会发生扩容后指向不同底层内存的事儿吗?
深度解密Go语言之unsafe
个人认为,学习本身并不是一件轻松愉快的事情,寓教于乐是个美好的愿望。想要深刻地领悟,就得付出别人看不见的努力。学习从来都不会是一件轻松的事情,枯燥是正常的。耐住性子,深入研究某个问题,读书、看文章、写博客都可以,浮躁时代做个专注的人!
梦醒人间
2019/06/03
6810
Go 语言基础 数组、切片、映射
在 Go 语言中,为便于存储及管理用户数据,其数据结构设计分为数组 Array、切片 Slice、映射 Map 三种结构。
Meng小羽
2020/06/19
1K0
Golang(二)基本概念
类型 18个基本类型:bool、string、rune、byte、int、uint、int8、uint、int8、int16、uint16、int32、uint32、int64、uint64、float64、complex64、complex128 7个复合类型:array、struct、function、interface、slice、map、channel 其中,slice、map 和 channel 都是引用类型 最后,还有一种无符号的整数类型 uintptr,没有指定具体的 bit 大小但是足以容纳
西凉风雷
2022/11/23
2020
相关推荐
Go语言切片面试真题8连问
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验