go - 编译器是否优化变量声明?

标签 go compiler-optimization

给定一个迭代:

 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/

相关文章:

c++ - 为什么类中相同函数定义的执行时间要慢 10 倍以上?

io - 转到 channel 和 I/O

go - 如何访问模板中的结构字段

string - 查找、解析和验证电子邮件地址

java - Java 编译器是否优化了空的同步块(synchronized block)?

c - GCC 5.1 循环展开

json - 如何在golang中获取所有具有jsonpaths的对象

go - 调试时如何在 Visual Studio Code 中查看全局变量?

c# - 允许 C# 编译器优化局部变量并从内存中重新获取值

performance - Go 运行时是否在每次迭代时评估 for 循环条件?