var a [4]int
和 和有什么不一样b := make([]int, 4)
?b
可以扩展,但不能,a
对吗?但是如果我知道我真的需要 4 个元素,那么数组是否比切片更快?var d []int
和之间有任何性能差异e := make([]int)
吗?会f := make([]int, 5)
比没有前 5 个元素的长度提供更多的性能吗?这
c := make([]int, 5, 10)
不会分配比我可以访问更多的内存吗?
问问题
2445 次
1 回答
7
a
是一个数组,并且b
是一个切片。切片与数组的不同之处在于切片是指向数组的指针。切片是引用类型,这意味着如果将一个切片分配给另一个切片,它们都引用同一个底层数组。例如,如果一个函数接受一个切片参数,它对切片元素所做的更改将对调用者可见,类似于传递一个指向底层数组的指针(上面来自Learning Go)。您可以轻松地使用append
和copy
切片。Array 应该比 slice 快一点,但差别不大。除非您确切知道大小,否则最好使用 slice 来简化操作。- make([]type,length, capacity),您可以估计大小和可能的容量以提高性能。
更多细节,可以参考:Go Slices: usage and internals
于 2013-02-24T03:02:05.223 回答