首页 > 解决方案 > 编译器是否优化变量声明?

问题描述

给定一个迭代:

 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

标签: gocompiler-optimization

解决方案


是否优化可能取决于您未显示的其他代码,以及编译器版本/目标架构。虽然我怀疑何时涉及并发和其他函数调用,但性能瓶颈将是int=>int64转换。如果您摆脱这种转换,您很可能不会看到任何差异。

另请注意,如果您使用的架构是 64 位,则 和 的大小(以及内存表示和解释)int相同int64,这意味着转换不会产生任何成本,它只是更改类型(如何解释)。

编辑:由于您无论如何都在使用睡眠,因此摆脱转换将毫无意义。使用使您的代码更具可读性的任何一种。


推荐阅读