博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
valgrind调试CPU缓存命中率和内存泄漏
阅读量:6713 次
发布时间:2019-06-25

本文共 1574 字,大约阅读时间需要 5 分钟。

valgrind在C语言编程中,对程序的性能调试,判断一个程序的代码质量是否高效有很明显的用处。下面具体分析一下:

测试程序的CPU命中率(CPU cache hit/miss rate)

模拟写两个小程序,用来测试CPU的缓存命中率,分别名为cache1.c和cache2.c.

cache1.c代码如下:

#include 
                                                                                                                           #define MAXROW 8000 #define MAXCOL 8000                                                              int main () {                                                              int i,j; static int x[MAXROW][MAXCOL];                                                              printf ("Starting!\n");                                                                       for (i=0;i

cache2.c代码如下:

#include 
                                                         #define MAXROW 8000 #define MAXCOL 8000 int main () { int i,j; static int x[MAXROW][MAXCOL]; printf ("Starting!\n");          for (j=0;j

编译cache1.c运行程序后查看命CPU缓存命中率结果

编译cache2.c运行程序后查看命CPU缓存命中率结果

显然是cache1的cache miss rate较低,程序的代码质量更高效.

补充:测试程序的内存泄漏(memory leak)
当前系统gcc的版本

写个小的测试程序

#include 
                                               #define M 5 int main(void) { int i; int a[M]={11,22,33,44,55}; for (i=0;i

使用默认功能的gcc编译,运行显示正常,其实已经存在数组越界的问题,那么再用valgrind测试一下程序的是否存在内存泄.

结果也没有发现内存泄漏.

然后让gcc支持mudflap功能,RHEL/CentOS需要安装libmudflap-4.1.2-52.el5和libmudflap-devel-4.1.2-52.el5两个rpm包,再用gcc带mudflap功能编译,执行程序看效果

可以看出当去读取数组下标为5的值时,出现了数组越界的问题,默认的gcc编辑器是不会去关心数组越界问题的.

以上是用valgrind测试内存泄漏的用法,不过有时valgrind检测不到,可以用mudflap的强大功能查出内存泄漏的问题,不过需要注意的是mudflap对系统资源的消耗也很大,有利有弊,在特定的时候用一下还是很不错的选择.

转载地址:http://ijhlo.baihongyu.com/

你可能感兴趣的文章
我的友情链接
查看>>
perl将字符串时间转换成epoch time
查看>>
ocserv配置文件
查看>>
对你同样重要的非技术贴,一封有效的求职信的具体写法
查看>>
在路由器里插入和删除ACL
查看>>
我的友情链接
查看>>
前端开发IDE
查看>>
OpenStack从入门到放弃
查看>>
戴尔和EMC已经成为正式的竞争对手
查看>>
6425C-Lab12 管理DC(1)
查看>>
RocketMQ调研笔记
查看>>
maven 注册 jar
查看>>
高并发写入mysql的设计
查看>>
成长点滴:我不知道该说些什么?
查看>>
Android widget 桌面组件开发
查看>>
HP EVA4400服务器RAID信息丢失数据恢复方法
查看>>
我的友情链接
查看>>
heap中的heapify与依次压入队列的差异
查看>>
找工作体会
查看>>
linux之使用man查看命令手册
查看>>