8
  • 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)不会分配比我可以访问更多的内存吗?

4

1 回答 1

7
  • a是一个数组,并且b是一个切片。切片与数组的不同之处在于切片是指向数组的指针。切片是引用类型,这意味着如果将一个切片分配给另一个切片,它们都引用同一个底层数组。例如,如果一个函数接受一个切片参数,它对切片元素所做的更改将对调用者可见,类似于传递一个指向底层数组的指针(上面来自Learning Go)。您可以轻松地使用appendcopy切片。Array 应该比 slice 快一点,但差别不大。除非您确切知道大小,否则最好使用 slice 来简化操作。
  • make([]type,length, capacity),您可以估计大小和可能的容量以提高性能。

更多细节,可以参考:Go Slices: usage and internals

于 2013-02-24T03:02:05.223 回答