为了账号安全,请及时绑定邮箱和手机立即绑定

两个 Uint64 的意外加法行为

两个 Uint64 的意外加法行为

Go
慕的地6264312 2022-06-06 16:51:21
问题在下面的代码中,我有几个 Go 例程,我面临的一个问题是“calculateMemoryUsage()”Go 例程,其中每半秒计算一次平均内存使用量。出于某种原因,总数不断给我奇怪的值。这是打印日志:Memory Usage: 162224Average: 162224Total: 162224Iteration Count: 1Memory Usage: 181200Average: 171712Total: 343424Iteration Count: 2Memory Usage: 187864Average: 119858Total: 359576Iteration Count: 3正如所见,从第三次迭代开始,平均值出现了混乱,因为总数没有正确添加。调试后,我看到内存使用情况读取良好,但总似乎给我带来了问题。我怀疑 GC,但是在这个问题中,LastGC 的值设置为 0,这意味着没有执行 GC。任何建议将不胜感激!:)代码func main() {    db, err := sql.Open("mysql", "<credentials_removed>@@tcp(127.0.0.1:3306)/rts")    err = db.Ping()    if err != nil {        panic(err.Error()) // proper error handling instead of panic in your app    }    showStocksChannel := make(chan bool)    showBestPerformingChannel := make(chan bool)    go calculateMemoryUsage()    go showStocks(showStocksChannel, db)    go changeStockPrices(showStocksChannel, showBestPerformingChannel, db)    go displayBestPerformingStocks(showBestPerformingChannel, db)    showStocksChannel <- true    select{}}func calculateMemoryUsage() {    var averageMemoryUsage uint64 = 0    var iterations uint64 = 0    var usage uint64 = 0    var total uint64 = 0    for iterations <= 200 {        var memoryStats runtime.MemStats        runtime.ReadMemStats(&memoryStats)        iterations = iterations + 1        usage = memoryStats.Alloc        total = (averageMemoryUsage + usage)        averageMemoryUsage = total / iterations        fmt.Printf("\nMemory Usage: %v\nAverage: %v\nTotal: %v\nIteration Count: %v\n\n", usage, averageMemoryUsage, total, iterations)        time.Sleep(time.Millisecond * 1000)        //fmt.Printf("\nLast GC: %v\nNext GC: %v\n\n", memoryStats.LastGC, memoryStats.NextGC)    }    fmt.Printf("\nAverage Memory Usage: %v bytes\n\n", averageMemoryUsage)}
查看完整描述

1 回答

?
缥缈止盈

TA贡献2041条经验 获得超4个赞

这条线

total = (averageMemoryUsage + usage)

应该

total = (total + usage)


查看完整回答
反对 回复 2022-06-06
  • 1 回答
  • 0 关注
  • 178 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号