go - 编译器是否优化变量声明?
问题描述
给定一个迭代:
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
,这意味着转换不会产生任何成本,它只是更改类型(如何解释)。
编辑:由于您无论如何都在使用睡眠,因此摆脱转换将毫无意义。使用使您的代码更具可读性的任何一种。
推荐阅读
- vb.net - 从 DataGridView 和 Access 数据库中删除错误
- kotlin - get array from inside many objects in kotlin
- excel - Excel sort with formula in cell
- python - my tkinter doesnt show up anything i have coded
- javascript - Merging objects with multiple properties in JS
- android - Flutter Fresh 项目出现 lint-gradle-api.jar 错误(com.android.tools.lint:lint-gradle-api:26.1.2)
- angular - 带有路径'**'的Angular 6 Route
- java - 如果匿名类数据成员没有在父类中声明,我们可以不访问它们吗?
- python - 在列中获取“真”值而不是原始值
- sql - OPENROWSET - 文件名中的空格问题