给定一个迭代:
LOOP:
for {
select {
case <-timeout:
t.Fatal("Timed out")
default:
if Count() == int64(num) {
break LOOP
}
time.Sleep(5 * time.Millisecond)
}
}
Count()
返回 int64
,所以我需要转换,Count
变化,所以我们在这里检查直到 Count()
返回一个期望值——可能是数千次迭代。编译器是否优化了这种转换?
还是转换
num
更好, 之前在其他地方使用为int
而不是 int64
,在开始循环之前?
最佳答案
是否优化可能取决于您未显示的其他代码,以及编译器版本/目标架构。虽然我怀疑何时涉及并发和其他函数调用,但性能瓶颈将是 int
=> int64
转换。如果您摆脱这种转换,您很可能不会看到任何差异。
另请注意,如果您使用的体系结构是 64 位,int
的大小(以及内存表示和解释)和 int64
是一样的,这意味着转换不会产生任何成本,它只是改变类型(它是如何解释的)。
编辑:由于您无论如何都在使用 sleep ,因此摆脱转换将毫无意义。使用使您的代码更具可读性的任何一种。
关于go - 编译器是否优化变量声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59392606/