Go语言 为什么传递变量参数会这么慢?

wpx232ag  于 2023-08-01  发布在  Go
关注(0)|答案(1)|浏览(109)
package main

import (
    "fmt"
    "time"
)

func main() {

    n := 1024
    dst1 := make([]byte, n)
    dst2 := make([]byte, 0, n)
    dst3 := make([]byte, 0, n)

    start := time.Now()
    for i := 0; i < n; i++ {
        dst1[i] = byte(i)
    }
    fmt.Println(uint64(time.Since(start).Microseconds()))

    start = time.Now()
    for i := 0; i < n; i++ {
        dst2 = append(dst2, dst1[i])
    }
    fmt.Println(uint64(time.Since(start).Microseconds()))

    start = time.Now()
    for i := 0; i < n; i++ {
        dst3 = append(dst3, dst1...)
    }
    fmt.Println(uint64(time.Since(start).Microseconds()))
}

字符串
基准测试结果:

2
2  
2711

为什么传递variadic参数这么慢?

iqxoj9l9

iqxoj9l91#

最后一个for循环使用append将较大的“dst3”切片多次添加到“dst1”切片。这需要花费更多的时间,因为每次迭代都涉及将整个“dst3”切片复制到“dst1”切片。

相关问题