小编典典

代码顺序和性能

go

我想找到更快的:结构与数组。因此,我编写了一个GO代码,在其中我将4个int值(1、2、3和4)写入一个结构的成员,然后写入一个长度为4的数组。我试图找出写入所需的时间。

案例1:首先,我将值写入结构,然后写入数组。在这里,我发现数组比结构要快。

package main

import (
    "fmt"
    "time"
)

type abc struct {
    a, b, c, d int
}

func main() {

    var obj abc

    t1 := time.Now()
    obj.a = 1
    obj.b = 2
    obj.c = 3
    obj.d = 4
    t2 := time.Since(t1)

    fmt.Println("Struct access time: : ", t2)

    a := make([]int, 4)
    t3 := time.Now()
    a[0] = 1
    a[1] = 2
    a[2] = 3
    a[3] = 4
    t4 := time.Since(t3)

    fmt.Println("Array access time: : ", t4)

}

情况2:其次,我将值写入数组,然后写入结构。在这里,我发现结构比数组要快。

package main

import (
    "fmt"
    "time"
)

type abc struct {
    a, b, c, d int
}

func main() {

    var obj abc

    a := make([]int, 4)
    t3 := time.Now()
    a[0] = 1
    a[1] = 2
    a[2] = 3
    a[3] = 4
    t4 := time.Since(t3)

    fmt.Println("Array access time: : ", t4)

    t1 := time.Now()
    obj.a = 1
    obj.b = 2
    obj.c = 3
    obj.d = 4
    t2 := time.Since(t1)

    fmt.Println("Struct access time: : ", t2)

}

为什么性能取决于我首先写的内容​​?我首先写的那个似乎慢一些。为什么会这样呢?


阅读 275

收藏
2020-07-02

共1个答案

小编典典

另一个答案解释了时序差异,让我们进入结构与切片。

如果编译器可以在编译时确定切片足够大,则访问切片的元素和结构将生成相同的代码。当然,实际上,实际上,编译器通常不会知道切片的大小,并且将根据您使用的是结构还是切片来应用完全不同的优化,因此,要衡量性能,您必须查看整体程序及其行为,而不仅仅是一项特定的操作。

2020-07-02