C/C++性能测试工具---Valgrind

一、valgrind memcheck--内存错误检测器

可以检测下列与内存相关的问题:

  • 未释放内存的使用
  • 对释放后内存的读/写
  • 对已分配内存块尾部的读/写
  • 内存泄露
  • 不匹配的使用malloc/new/new[] 和 free/delete/delete[]
  • 重复释放内存

 valgrind --tool=memcheck  ./a.out

二、 valgrind massif--堆分析器

监视程序内存分配。若是在运行程序中发现占用内存较多,想要知道使用内存较多的代码行,可以使用valgrind的massif工具

Massif是一个内存剖析工具。通过不断的取程序堆的快照来达到监视程序内存分配的目的。

valgrind --tool=massif ./a.out

 会生成一个massif文件,可以使用ms_print来解析这个输出文件

ms_print massif.out.32682(进程pid)

三、valgrind cachegrind--缓存和分支预测分析器

valgrind --tool=cachegrind ./a.out 

指令运行结果: 打印摘要信息

除打印信息外,还会将更详细的信息写入cachegrind.out.pid

cg_annotate cachegrind.out.pid

 四、valgrind callgrind--调用图缓存生成分析器

callgrind使用cachegrind的统计信息Ir(I cache reads, 即一条指令执行的次数)来统计程序中函数的调用情况,建立函数调用关系图,在运行结束后,会把结果写入callgrind.out.pid文件中

valgrind --tool=callgrind --separate-threads=yes ./a.out

 --separate-threads=yes 表示要查看多线程相关数据

这条指令会在当前目录下生成一个callgrind.out.pid文件

1. 查看文件

callgrind_annotate callgrind.out.pid

 结果示例  会给出Ir  文件:函数

2. 注解源文件

callgrind_annotate callgrind.out.pid XX.c

 会将XX.c的每一行代码调用次数标清楚

 

设计和实现性能测试工具的关键是要确定测试的目标和指标,并选择合适的测试方法和工具。下面是一些基本的设计和实现步骤: 1. 确定测试目标和指标:首先需要明确要测试的是什么,比如某个 C/C++ 函数或者代码段的性能。然后需要确定测试的指标,比如执行时间、CPU 占用率、内存占用等。 2. 选择测试方法和工具:根据测试目标和指标选择合适的测试方法和工具。比如可以使用基准测试框架(benchmarking framework)进行测试,也可以手动编写测试代码并使用性能分析工具(如 gprof、perf、Valgrind 等)进行分析。 3. 编写测试代码:根据测试目标编写测试代码,可以使用循环多次执行代码以获得更准确的结果。测试代码应该能够反映真实场景中的使用情况,比如使用真实数据集进行测试。 4. 进行测试:使用选择的测试工具和方法进行测试,记录测试结果和相关参数(如输入数据、测试环境等)。 5. 分析测试结果:根据测试结果和指标进行分析,比较不同测试条件下的性能差异,找出性能瓶颈和优化方案。 6. 优化代码:根据测试结果和分析结果进行代码优化,重新进行测试并比较结果。 7. 循环迭代:反复进行测试、分析、优化,直到达到预期的性能目标。 总之,设计和实现性能测试工具需要综合考虑测试目标、指标、方法和工具等多方面因素,需要不断迭代来达到最佳的性能优化方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晏九

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值