gpt4 book ai didi

戈朗 : how to explain the type assertion efficiency?

转载 作者:IT王子 更新时间:2023-10-29 01:55:19 24 4
gpt4 key购买 nike

<分区>

类型断言将涉及调用 runtime.assertE2T 或 runtime.assertE2I(您可以查看汇编代码)。

package main

import (
"fmt"
"time"
)

type I interface {
echo()
}

type A struct{}

func (a *A) echo() {}

type testfn func()

func run(f testfn) {
ts := time.Now()
f()
te := time.Now()
fmt.Println(te.Sub(ts))
}

func testE2T() {
var i interface{} = new(A)
for a := 0; a < 500000000; a++ {
_ = i.(*A)
}
}

func testE2I() {
var i interface{} = new(A)
for a := 0; a < 500000000; a++ {
_ = i.(I)
}
}

func main() {
fmt.Println("testE2I:")
run(testE2I)
fmt.Println("testE2T:")
run(testE2T)
}

结果:

testE2I:
11.065225934s
testE2T:
5.720773381s

似乎类型断言比C中的指针转换慢?怎么解释呢?

奇怪的是,当我使用gccgo 运行同一个程序时,它会导致内存不足的错误。 gccgo对gc有没有限制?

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com