2 回答
TA贡献1853条经验 获得超6个赞
它是否优化可能取决于您未显示的其他代码,以及编译器版本/目标体系结构。虽然我怀疑何时涉及并发和其他函数调用,但性能瓶颈将是int
=>int64
转换。如果取消该转换,您很可能不会看到任何差异。
另请注意,如果您使用的体系结构是 64 位,则int
和的大小(以及内存表示和解释)int64
是相同的,这意味着转换不会产生任何成本,它只是更改类型(如何解释)。
编辑:由于您无论如何都在使用睡眠,因此摆脱转换是没有意义的。使用使您的代码更具可读性的任何一个。
TA贡献1844条经验 获得超8个赞
Go amd64 汇编器:
0000000000457bb0 <main.Equality>:
457bb0: 48 8b 44 24 08 mov 0x8(%rsp),%rax
457bb5: 48 8b 4c 24 10 mov 0x10(%rsp),%rcx
457bba: 48 39 c8 cmp %rcx,%rax
457bbd: 0f 94 44 24 18 sete 0x18(%rsp)
457bc2: c3 retq
正如预期的那样,速度很快。
编译器知道,对于 amd64,int
与int64
. 无需转换。
opt.go
:
package main
//go:noinline
func Equality(a int64, b int) bool {
return a == int64(b)
}
func main() {
var a, b = int64(42), int(39)
println(Equality(a, b))
}
倾倒:
$ go build opt.go
$ objdump -d opt > opt.dump
- 2 回答
- 0 关注
- 118 浏览
添加回答
举报