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文件如下:
- #include <stdio.h>
- #include <stdlib.h>
- void main()
- {
- test();
- return;
- }
test.c文件如下:
- #include <stdio.h>
- #include <stdlib.h>
- #include "memwatch.h"
- void test()
- {
- int size = 0;
- void *p = NULL;
- int total = 0;
-
- while(1)
- {
- scanf("%d", &size);
- if (size == 0) {
- break;
- }
- p = malloc(size);
- total += size;
- printf("total is %d.\n", total);
- }
- return;
- }
生成的log文件memwatch.log内容如下:
- ============= MEMWATCH 2.71 Copyright (C) 1992-1999 Johan Lindh =============
- Started at Mon Dec 24 20:40:51 2012
- Modes: __STDC__ 64-bit mwDWORD==(unsigned long)
- mwROUNDALLOC==8 sizeof(mwData)==32 mwDataSize==32
- Stopped at Mon Dec 24 20:40:54 2012
- 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 ................}
- 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 ................}
- Memory usage statistics (global):
- N)umber of allocations made: 2
- L)argest memory usage : 7782
- T)otal of all alloc() calls: 7782
- U)nfreed bytes totals : 7782
- ============= MEMWATCH 2.71 Copyright (C) 1992-1999 Johan Lindh =============
- Started at Mon Dec 24 21:34:34 2012
- Modes: __STDC__ 64-bit mwDWORD==(unsigned long)
- mwROUNDALLOC==8 sizeof(mwData)==32 mwDataSize==32
- Stopped at Mon Dec 24 21:34:37 2012
- 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 ................}
- 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 ................}
- 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 ................}
- Memory usage statistics (global):
- N)umber of allocations made: 3
- L)argest memory usage : 1701
- T)otal of all alloc() calls: 1701
- U)nfreed bytes totals : 1701
memwatch.rar
阅读(3026) | 评论(0) | 转发(0) |