資源簡(jiǎn)介
mtrace可以用來 跟蹤當(dāng)前 系統(tǒng)/模塊的內(nèi)存 使用情況 ,以及估算系統(tǒng)/模塊的占用內(nèi)存的極值 , 系統(tǒng)/模塊 卸載時(shí)的 內(nèi)存 泄露情況。
代碼片段和文件信息
#include?
#include?“mtrace.h“
#if(?FS_TRACE_MEM>2)
#elif(?FS_TRACE_MEM>0)???????//mode?12
#define??MH_MAGIC_MASK??0xFFFFFFFC
#define??MH_TYPE_MASK?????0x00000003
#define??MH_MAGIC_ALLOC?????????????0xCCCCCCCC
#define??MH_MAGIC_FREE?????????????0xEEEEEEEE
#define??MH_TYPE_C?0
#define??MH_TYPE_M?1
#define??MH_TYPE_R?2
typedef?struct
{
int?magic;???????????//0xcccc??low?nibble?for?type
int?size;
#if(?FS_TRACE_MEM&2)
int?logindex;
#endif
}meminfo;
#define??meminfo_len??sizeof(meminfo)
DEFINE_MEMSTAT(default_memstat);????????????//total?mem?trace?for?all?fs?
#if(?FS_TRACE_MEM&2)
#define?MAX_ALLOC_FILNAMELEN 32
#define?MEMLOG_STATEFREE????0
#define?thisfs_memlog???stat->log
static?void?init_memlog(memstat?*stat)
{
if(thisfs_memlog.flag&memstat_log_inited)
return?;
#if?0
char?*log?=(char?*)?raw_calloc(sizeof(char?*)thisfs_memlog.limit);
if?(!log)
{
mtrace_log_error(“Failed?to?calloc?%d?logs\n“?(long)thisfs_memlog.limit);
return?;
}
thisfs_memlog.logstr?=?(char?**)log;
#endif
for?(int?i=0;i {
thisfs_memlog.logstr[i]=MEMLOG_STATEFREE;
}
thisfs_memlog.max_index=-1;
thisfs_memlog.free_index=0;
thisfs_memlog.alloc_count=0;
thisfs_memlog.flag?|=?memstat_log_inited;
if(default_memstat.log.flag&memstat_log_inited)
return?;
//?default_memstat.log.limit?=?MAX_ALLOC_ENTRYS;
#if?0
log?=(char?*)?raw_calloc(sizeof(char?*)default_memstat.log.limit);
if?(!log)
{
mtrace_log_error(“Failed?to?calloc?%d?logs\n“?(long)default_memstat.log.limit);
return?;
}
thisfs_memlog.logstr?=?(char?**)log;
#endif
for?(?i=0;i? {
default_memstat.log.logstr[i]=MEMLOG_STATEFREE;
}?
default_memstat.log.max_index=-1;
default_memstat.log.free_index=0;
default_memstat.log.alloc_count=0;
default_memstat.log.flag?|=?memstat_log_inited;
}
#define?logfmt?“%d%d%d%s“
static?size_t?o_size;
static?char?o_file[MAX_ALLOC_FILNAMELEN];
static?int?o_line;
static?int?o_times;
static?int?register_log(meminfo?*pint?line?char?*filememstat?*stat)
{
int?ij;
int??retry=0;
size_t?size??=?p?->size;
init_memlog(stat);
p->logindex?=?memstat_log_index_invalid;
//use?the?already?log?entry?
for(?i=0?;i<=thisfs_memlog.max_index;i++)
{
if(thisfs_memlog.logstr[i]==MEMLOG_STATEFREE)
continue;
sscanf(thisfs_memlog.logstr[i]??logfmt??&o_times&o_size&o_line?o_file);
if(/*(o_size==size)&&*/(o_line==line)&&(strcmp(o_filefile)==0)&&o_times>0)
{
snprintf((char*)?thisfs_memlog.logstr[i]?MAX_ALLOC_FILNAMELEN?logfmt?o_times+1size+o_sizelinefile);
p->logindex?=?i;
return?0;
}
}
//create?new?log
if(thisfs_memlog.flag?&?memstat_log_allused)
{
mtrace_log_error(“all?used?out?now\n“);
return?-1;
}
j=thisfs_memlog.free_index;
if(thisfs_memlog.logstr[j])
{
mtrace_log_error(“already?used?now\n“)
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件????????754??2010-08-10?10:38??config.h
?????文件??????11338??2010-08-10?10:36??mtrace.c
?????文件???????2650??2010-08-10?10:27??mtrace.h
-----------?---------??----------?-----??----
????????????????14742????????????????????3
評(píng)論
共有 條評(píng)論