值得一看
广告
彩虹云商城
广告

热门广告位

Golang基准测试如何测量内存分配

Go语言基准测试通过b.ReportAllocs()可统计内存分配情况,输出包含每次操作的平均内存分配字节数(B/op)和分配次数(allocs/op),结合b.SetBytes()还能分析数据处理时的内存效率与吞吐关系。

golang基准测试如何测量内存分配

Go语言的基准测试(Benchmark)不仅能测量代码执行时间,还能统计内存分配情况。要了解一段代码在运行时分配了多少内存、分配了多少次,可以直接通过*testing.B提供的方法获取。

使用 b.ReportAllocs() 记录内存分配

在基准测试函数中调用 b.ReportAllocs(),即可开启对内存分配的追踪。Go运行时会自动记录每次基准循环中的堆内存分配总量和分配次数。

例如:


func BenchmarkExample(b *testing.B) {
    b.ReportAllocs()
    for i := 0; i < b.N; i++ {
        // 被测代码
        _ = make([]int, 100)
    }
}

运行这个基准测试时,输出结果会包含三部分:
– 基准耗时(ns/op)
– 内存分配字节数(B/op)
– 分配次数(allocs/op)

理解输出中的内存指标

执行 go test -bench=. 后,你会看到类似这样的输出:

立即学习“go语言免费学习笔记(深入)”;


BenchmarkExample-8 10000000 120 ns/op 400 B/op 1 allocs/op

其中:

AGI-Eval评测社区

AGI-Eval评测社区

AI大模型评测社区

AGI-Eval评测社区63

查看详情
AGI-Eval评测社区

  • 400 B/op:表示每次操作平均分配了400字节内存
  • 1 allocs/op:表示每次操作发生了1次内存分配

这些数据来自Go运行时的采样统计,仅反映堆上分配的情况,栈上分配不会计入。

结合 b.SetBytes() 测量吞吐相关的内存效率

如果你的基准测试处理的是数据流或缓冲区操作,可以配合 b.SetBytes() 来展示每秒处理的数据量与内存开销的关系。

比如测试复制1KB数据:


func BenchmarkCopy(b *testing.B) {
    b.ReportAllocs()
    data := make([]byte, 1024)
    for i := 0; i < b.N; i++ {
        copied := make([]byte, len(data))
        copy(copied, data)
    }
    b.SetBytes(1024)
}

此时输出会额外体现带宽信息,如 MB/s,并将内存分配归一化到每字节操作的成本,帮助你判断性能瓶颈是否与内存有关。

基本上就这些。只要加上 b.ReportAllocs(),就能清楚看到你的函数在真实场景下是否频繁触发GC或产生过多小对象。这对优化性能敏感路径非常有用。

相关标签:

go golang go语言 字节 栈 性能瓶颈 golang for int 循环 栈 堆 Go语言 len copy 对象

大家都在看:

Go 模板中在循环内部访问外部(根)变量
Go Web Server性能测试瓶颈分析:系统资源限制的深度探究
Go语言结构体方法接收器深度解析:值与指针的选择与应用
Go语言本地包导入与模块化开发指南
Go语言中访问深度嵌套的JSON键值
温馨提示: 本文最后更新于2025-10-11 22:28:28,某些文章具有时效性,若有错误或已失效,请在下方留言或联系在线客服
文章版权声明 1 本网站名称: 创客网
2 本站永久网址:https://new.ie310.com
1 本文采用非商业性使用-相同方式共享 4.0 国际许可协议[CC BY-NC-SA]进行授权
2 本站所有内容仅供参考,分享出来是为了可以给大家提供新的思路。
3 互联网转载资源会有一些其他联系方式,请大家不要盲目相信,被骗本站概不负责!
4 本网站只做项目揭秘,无法一对一教学指导,每篇文章内都含项目全套的教程讲解,请仔细阅读。
5 本站分享的所有平台仅供展示,本站不对平台真实性负责,站长建议大家自己根据项目关键词自己选择平台。
6 因为文章发布时间和您阅读文章时间存在时间差,所以有些项目红利期可能已经过了,能不能赚钱需要自己判断。
7 本网站仅做资源分享,不做任何收益保障,创业公司上收费几百上千的项目我免费分享出来的,希望大家可以认真学习。
8 本站所有资料均来自互联网公开分享,并不代表本站立场,如不慎侵犯到您的版权利益,请联系79283999@qq.com删除。

本站资料仅供学习交流使用请勿商业运营,严禁从事违法,侵权等任何非法活动,否则后果自负!
THE END
喜欢就支持一下吧
点赞14赞赏 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容