当前位置: 首页 > 面试题库 >

代码顺序和性能

卫弘懿
2023-03-14
问题内容

我想找到更快的:结构与数组。因此,我编写了一个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)

}

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


问题答案:

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

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



 类似资料:
  • 本文向大家介绍以下代码的执行顺序?相关面试题,主要包含被问及以下代码的执行顺序?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: //输出2,6,5,3,4,1 为什么呢?具体请参考我的文章: 从promise、process.nextTick、setTimeout出发,谈谈Event Loop中的Job queue

  • 我有两个操作step\u 1()和step\u 2(),希望在step\u 1()之后执行step\u 2()。 对于普通java,这将是: 对于vertx,我必须使用vertx-compose()。我说得对吗? 根据https://groups.google.com/forum/#哦!topic/vertx/FuvlPLpoGOA,我不需要序列代码的未来。 “如果你想按顺序完成每个请求,你不需要

  • When executing a test class that contains one or more test methods, a number of extension callbacks are called in addition to the user-supplied test and lifecycle methods. See also: Test Execution Ord

  • 模块顺序和返回代码 你不能简单地把一个模块放到一个部分中,希望它能完成它应该做的工作。 模块在一个部分中列出的顺序至关重要。

  • 我有一个表示当前状态对象“cell”列表。 我知道并行解决一个问题总是需要一个开销。在这种情况下,它在我的循环中加速。你能推荐什么方法来加速我的循环?

  • 当使用Angular keyvalue管道遍历对象的属性时,如下所示: 我遇到过一个问题,即属性没有按照预期的顺序迭代。这条评论表明,我不是唯一一个经历过这个问题的人: 如何在Angular中使用ngFor循环对象属性