gpt4 book ai didi

go - 设置 slice 容量有什么意义?

转载 作者:IT老高 更新时间:2023-10-28 13:09:41 25 4
gpt4 key购买 nike

在 Golang 中,我们可以使用内置的 make() 函数来创建具有给定初始长度和容量的 slice 。

考虑以下几行, slice 的长度设置为 1,容量设置为 3:

func main() {
var slice = make([]int, 1, 3)
slice[0] = 1
slice = append(slice, 6, 0, 2, 4, 3, 1)
fmt.Println(slice)
}

看到这个程序打印出来我很惊讶:

[1 6 0 2 4 3 1]

这让我想知道 - 如果 append() 可以简单地超过它,那么最初定义 slice 的容量有什么意义?设置足够大的容量是否有性能提升?

最佳答案

slice 实际上只是一种管理底层数组的奇特方式。它会自动跟踪大小,并根据需要重新分配新空间。

当您附加到 slice 时,运行时每次超过其当前容量时都会将其容量加倍。它必须复制所有元素才能做到这一点。如果您在开始之前就知道它有多大,那么您可以通过预先抓取它来避免一些复制操作和内存分配。

当您制作一个提供容量的 slice 时,您设置的是初始容量,而不是任何类型的限制

this blog post on slices了解 slice 的一些有趣的内部细节。

关于go - 设置 slice 容量有什么意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45423667/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com