首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在go中,是否值得避免创建大小为0的片?

在go中,是否值得避免创建大小为0的片?
EN

Stack Overflow用户
提问于 2015-10-23 01:58:14
回答 2查看 111关注 0票数 1

我有一个程序,在这个程序中,我将制作大量的切片,其中一些可能是空的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
nb := something() // something might return 0
slices = append(slices, make([]int, nb))

make([]int, 0)是否分配了一些内存,因此,尽管它们具有相同的行为,但它们的内存效率低于nil片?多少钱?

如果是这样的话,是否值得进行一次测试以避免无用的分配,或者测试的CPU时间成本不值得节省内存(或任何其他不这样做的原因)?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var sl slice
nb := something()
if nb > 0 {
    sl = make([]int, nb)
}
slices = append(slices, sl)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-23 02:58:09

之间的分配内存没有差别。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var a []T // nil slice

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
a := make([]T, 0) // zero-length, zero-capacity, non-nil slice

不同之处在于片头内容。在第二种情况下,片指针包含一些固定地址,对于所有0大小的分配都是一样的.

如果这段代码在程序的性能关键部分,那么差异会使.差别很大。在第一种情况下,对片头执行零操作,在第二种情况下,在malloc返回指向零基的指针之前,要执行3-4函数调用、对上限和长度的一些范围检查,等等。

票数 4
EN

Stack Overflow用户

发布于 2015-10-23 02:28:45

使([]int,0)分配一些内存

是的,它分配了一个片头,但是没有支持数组。如果片头没有转义当前作用域,则可以在堆栈上分配它。

内存效率比零片低

就使用的内存而言,它们是一样的。

是否值得做一次测试以避免无用的分配

通常,与执行内存分配和初始化所需的周期相比,对int进行比较所需的3或4个指令是没有意义的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33299616

复制
相关文章
Go中的死锁以及如何避免
死锁是指两个或更多的进程永久性地互相等待对方释放资源的情况。这通常发生在每个进程都持有至少一个资源,但又需要另一个当前被其他进程持有的资源才能继续执行。
运维开发王义杰
2023/08/10
5090
Go中的死锁以及如何避免
Go语言编程中判断文件是否存在是创建目录的方法
创建目录 os.Mkdir创建单个目录函数原形func Mkdir(name string, perm FileMode) error输入一个目录的名称和目录的权限,我们可以用默认的os.ModePerm然后返回的是一个error的信息,我们看下,也一块复习前边的一点知识 import ( "fmt" "os" ) func main() { var path string if os.IsPathSeparator('\\') { //前边的判断是否是系统的分隔符 path = "\
李海彬
2018/03/20
1.6K0
Go语言编程中判断文件是否存在是创建目录的方法
创建目录 os.Mkdir创建单个目录函数原形func Mkdir(name string, perm FileMode) error输入一个目录的名称和目录的权限,我们可以用默认的os.ModePerm然后返回的是一个error的信息,我们看下,也一块复习前边的一点知识 import ( "fmt" "os" ) func main() { var path string if os.IsPathSeparator('\\') { //前边的判断是否是系统的分隔符 path = "\\
李海彬
2018/03/26
2K0
vsftpd上传文件大小为0(主动模式)
  1.开放你的21端口可以直接按照你默认的22端口编写,把22原封不动弄一行,然后把复制的22换成21即可(技巧:在22那行按esc,然后按yyp即可复制本行)
Arebirth
2019/09/30
1.7K0
vsftpd上传文件大小为0(主动模式)
vsftpd上传文件大小为0(主动模式)
  1.开放你的21端口可以直接按照你默认的22端口编写,把22原封不动弄一行,然后把复制的22换成21即可(技巧:在22那行按esc,然后按yyp即可复制本行)
Arebirth
2019/09/30
1.8K0
遍历目录清理COS中大小为0的对象 for JAVA
在上传到COS文件中,会存在一些0字节的文件,对于部分业务来说是无效的。需要做清理。
wainsun
2020/11/06
1.5K0
遍历目录清理COS中大小为0的对象 for JAVA
liunx下选择文件大小为0的文件(find)
修改对应的 -size 参数就可以查找指定大小的文件,如1k大小的文件(注意不要用 -size 1k,这个得到的是占用空间1k,不是文件大小1k的)
Laikee
2022/04/25
3.3K0
【DB笔试面试561】在Oracle中,如何预估即将创建索引的大小?
如果当前表大小是1TB,那么在某一列上创建索引的话索引大概占用多大的空间?对于这个问题,Oracle提供了2种可以预估将要创建的索引大小的办法:
AiDBA宝典
2019/09/29
1.3K0
Oracle中ascii为0的陷阱
墨墨导读:本文来自墨天轮读者投稿,ascii0是个空字符,如果将这个字符插入到oracle数据库中会是什么现象,是null吗?
数据和云
2020/10/27
8210
Oracle中ascii为0的陷阱
Go 判断元素是否在切片中
如何判断元素是否在切片中,Golang 并没有提供直接的库函数来判断,最容易想到的实现便是通过遍历来判断。
恋喵大鲤鱼
2021/12/06
10.3K0
Go 判断元素是否在切片中
java中判断是否为数组[通俗易懂]
大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说java中判断是否为数组,希望能够帮助大家进步!!!
Java架构师必看
2022/01/17
4.8K0
java中判断是否为数组[通俗易懂]
STL:调用empty()而不是检查size()是否为0
另一种方式是,调用empty()函数。各类STL容器都提供了empty()函数,如果为空,则empty()返回true;否则返回false。
用户6557940
2023/03/05
1.3K0
STL:调用empty()而不是检查size()是否为0
go 中 struct 是否可以比较?
今天来水一篇,最近比较忙,一直没有时间写 go 相关的,今天从一个小问题入手,来说说 struct 的比较问题。
LinkinStar
2022/09/01
8470
依赖注入是否值得?
在博客的世界里进行了一场关于使用依赖注入(DI)之优点和缺点的有趣讨论。论题是:依赖注入是否真的值得? 讨论始自Jacob Proffitt,他撰文解释他的观点说,依赖注入的伸缩性不好。据Proffitt认为,DI流行的唯一原因是Mocking。 DI进来这么流行的真实原因,和正交性、封装性或者其他“纯粹的”架构考量都没有关系。真正的原因是很多开发者都用DI来帮助使用Mock对象进行单元测试。随你怎么说,这个因素实际上说服了聪明的开发者选择DI而不是更简单的实现。 Proffitt甚至声称DI只对单元
张善友
2018/01/30
8150
在 Activity 的 onCreate() 方法中为什么获取 View 的宽和高为0?
如上面代码结果所示,在Activity的onCreate()方法中我们尝试获取控件的宽和高,却获取得是0,这是因为 View 绘制和 Activity 的生命周期方法并不同步,即使 Activity 回调了 onCreate()、onStart()、onResume() 方法,View 也不一定同步完成绘制,所以此时在这些方法里面获取 View 的尺寸时就获取不到,解决方法有以下几种:
codingblock
2019/05/25
1.3K0
为你的Go应用创建轻量级Docker镜像?
go build使用的是静态编译,会将程序的依赖一起打包,这样一来编译得到的可执行文件可以直接在目标平台运行,无需运行环境(例如 JRE)或动态链接库(例如 DLL)的支持。
iginkgo18
2021/06/25
7330
Kubernetes 是否值得学习吗?
Original image by Myriam Zilles from Pixabay
YP小站
2020/06/10
1.3K0
shell中判断变量是否为空
1.变量通过“ ”引号引起来 如下所示,可以得到结果为 is null #!/bin/bash para1= if[! -n "$para1"] then echo "is null" else echo "not null" fi 2.直接通过变量判断: 如下所示,得到的记过为: is null #!/bin/bash para1= if[!${para1}];then echo "is null" else echo "not null" f
休辞醉倒
2019/07/25
9.8K0
点击加载更多

相似问题

在go中创建接口片

28

是否值得避免在autofac容器中增加服务?

22

是否值得在Java Script中创建LinkedList

31

如何检查传递给函数的参数在Go中是否为0?

22

重写if语句以避免分支是否值得?

40
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文