Chinaunix首页 | 论坛 | 博客
  • 博客访问: 98573
  • 博文数量: 6
  • 博客积分: 157
  • 博客等级: 民兵
  • 技术积分: 102
  • 用 户 组: 普通用户
  • 注册时间: 2012-12-25 14:18
文章分类

全部博文(6)

文章存档

2013年(1)

2012年(5)

分类: LINUX

2012-12-25 14:20:39

 Valgrind的官网上明确说明该工具在64位机上尚不能使用。
怀着惴惴的心情试了一把memwatch,庆幸在64位机上正常使用。
 
===========================================================================
以下是在linux虚拟机下的实验内容。
 
到下载最新版本的memwatch源码。
源码下载解压后要稍微做点修改才能编译,也可以到本文的附件区中下载,可以直接使用。
 
使用方法
所有用到malloc和free的文件都需要包含memwathc.h文件;
memwatch.c需要一起编译到应用程序中;
程序必须正常退出才能生成记录文件memwatch.log;
编译的时候需要带-DMEMWATCH -DMENWATCH_STDIO选项(其实这个通过改改代码是可以不带的,但是为了尊重版权,还是建议大家就这么带上吧)。
编译命令:gcc -o main -DMEMWATCH -DMENWATCH_STDIO main.c test.c memwatch.c
生成main,执行:./main
 
虚拟机上实验代码如下。
main.c文件如下:

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <stdlib.h>


  3. void main()
  4. {
  5.     test();
  6.     return;
  7. }

test.c文件如下:

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include "memwatch.h"

  4. void test()
  5. {
  6.     int size = 0;
  7.     void *p = NULL;
  8.     int total = 0;
  9.     
  10.     while(1)
  11.     {
  12.         scanf("%d", &size);
  13.         if (size == 0) {
  14.             break;
  15.         }
  16.         p = malloc(size);
  17.         total += size;
  18.         printf("total is %d.\n", total);
  19.     }
  20.     return;
  21. }
 
生成的log文件memwatch.log内容如下:

点击(此处)折叠或打开

  1. ============= MEMWATCH 2.71 Copyright (C) 1992-1999 Johan Lindh =============
  2. Started at Mon Dec 24 20:40:51 2012
  3. Modes: __STDC__ 64-bit mwDWORD==(unsigned long)
  4. mwROUNDALLOC==8 sizeof(mwData)==32 mwDataSize==32
  5. Stopped at Mon Dec 24 20:40:54 2012
  6. unfreed: <2> test.c(20), 7658 bytes at 0x97aa718 {FE FE FE FE FE FE FE FE FE FE FE FE FE FE FE FE ................}
  7. unfreed: <1> test.c(20), 124 bytes at 0x97aa1f0 {FE FE FE FE FE FE FE FE FE FE FE FE FE FE FE FE ................}
  8. Memory usage statistics (global):
  9. N)umber of allocations made: 2
  10. L)argest memory usage : 7782
  11. T)otal of all alloc() calls: 7782
  12. U)nfreed bytes totals : 7782
  13. ============= MEMWATCH 2.71 Copyright (C) 1992-1999 Johan Lindh =============
  14. Started at Mon Dec 24 21:34:34 2012
  15. Modes: __STDC__ 64-bit mwDWORD==(unsigned long)
  16. mwROUNDALLOC==8 sizeof(mwData)==32 mwDataSize==32
  17. Stopped at Mon Dec 24 21:34:37 2012
  18. unfreed: <3> test.c(20), 456 bytes at 0x88a2c68 {FE FE FE FE FE FE FE FE FE FE FE FE FE FE FE FE ................}
  19. unfreed: <2> test.c(20), 789 bytes at 0x88a2918 {FE FE FE FE FE FE FE FE FE FE FE FE FE FE FE FE ................}
  20. unfreed: <1> test.c(20), 456 bytes at 0x88a2718 {FE FE FE FE FE FE FE FE FE FE FE FE FE FE FE FE ................}
  21. Memory usage statistics (global):
  22. N)umber of allocations made: 3
  23. L)argest memory usage : 1701
  24. T)otal of all alloc() calls: 1701
  25. U)nfreed bytes totals : 1701

 memwatch.rar  
阅读(3019) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:linux共享库实现互斥

给主人留下些什么吧!~~