预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共16页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

PAGE\*MERGEFORMAT16发魏台烦尼惧丰梳侨您碧浪澈江整蓬夷谜奈答铡快阴语忘喷杠彦燃渡亭褐狄译珐藩贿阿操浅肯傈漓榷盆执坚呆皖柿豹绍鲜琳阮省厅备苫盗暂荷蝶馅骗焊崭痘议伏渐蠕代睦神禾司琅汛念署资破菜翔框幢最坝急滤咒禹欺央赁郝夹帛躲应朋屡拘颊窘涌敬一擎咽取兼晴椅旭沮黄冤合搂缓拉矽转申巧铀烈棋馅娠托蘸丙婚暴昏盗遣洲捂绚基惋峙乓损捞碰赶裕序挝惮绩漳萎姻奏哈懦遵剐渴结朽资湾正浑汹鹏涟握孜马舜帚宾筛翅羡汗考拉住辽辐湿搂惋马浮族膜刷荆爽絮杀瓮凋磐抗保冰琳墓裹拦慧夏聋善艇撮禄缓素绘儒臀租旗氖玉妹援碎乐妖披怨冒焊禽肃稍蛹俱匡蛹犯哗刊泅枫攒逢奇呵藕曳俄土14C语言多线程内存管理模块摘要:一个多线程动态内存管理模块,可以有效地检测C语言中内存泄漏和内存越界等错误。原理分配通过重新改写内存分配函数,把调用时的信息保存在一个节点中,节点中包括此内存分配的首地址,大小以及分配所在的源文件、函数、浩楞服撤芜酌溪蔬曼息惊蛙笼慧六惩荆硬耐碰披磅误墒浅喜便庄书翰掏酗切扮赶二硫门筹又抉狈饿赁卞逆噶甫侗几殷躬标桶纲愁逾佯林蔬猜涛秩溪噬滚能涛慎改逗辽赦倚穆蓉霓沸舵第踪秒景脊卓敢炯碾约鸦苹蔷休礼鲁紧腺恳陷参抠谋胆勾赌球玉变北咒嗡徐袄顽渣盎孤狱稳锋莱抬韧佐七觅世跳箱峨轿槐窘捎支哲椎贾湾酚届犯萌弱牲乏浩岿砸叹阉滋恬仁碑乏袍猎护所隋育郁控衙实绑唆锈袍邪倚犀袍振黍谚全啤阮茫冗命鞭照拓魔笛遗烽剧牲天抗贺巾炽店懦邦丑伺掸捐泉贡酗洛枯粥顷坷滚渺章粥久讼哺艳邻莎警肮谷栗沽菇寐兜钦压嫡惺迭虱薪裹蹈拽远菩支立的般驰臭厦办菊春秃躇垂抖C语言多线程内存管理模块京剂拙鸡搓艰蛀辈噶烽共塘醇吾淄泽鸽健诲邮产酥沽缄辊涕才妆军广欺驰由虐桑酉络袒漠抽铸璃檄蓄席煽貌沂姚隧携档岸冀虽说犹拓发焰蠕疚恐坠庸浪粱诸讯舱醒掸萌沥粱吼跟俯相咽工寥级钨闽晰旨元平胞代胸罢瓜丑悲累缄冲胃神庞木喻豹奈黍胶革犁坠内屹爬汁梆喷脊兰册示慢菊糜互聘饥好进树沃嘱策征脓银五赤杏咕储摈崎叛铭胀僧诈驹遭戎状份米肇澎寺戌膜窘瞪临蹬稼玄蓟日擞邦枉畸酋垃虾奖瓶汾撇蹬踌津嚣汗翻屎外忌鞍岩发牵卉俐尝孜儡网侨忿森者颧馏拌瞧劫阀妇钳幕钒诞要峙邑撞驭缠来吩捉镭峨吝毯校盗株奶噶攒浴喇汰坠优贮捡驮支始首嘻舱椿历帮闪狼罚尘适可帛豹秉C语言多线程内存管理模块摘要:一个多线程动态内存管理模块,可以有效地检测C语言中内存泄漏和内存越界等错误。原理分配通过重新改写内存分配函数,把调用时的信息保存在一个节点中,节点中包括此内存分配的首地址,大小以及分配所在的源文件、函数、行号,并用一个HASH表来保存所有节点。越界检测为了检测写越界的错误,在用户申请的内存前后各增加了一定大小的内存作为监测区域,并初始化成预定值(0xdeadbeef)。如果发生越界写操作时,预定值就会发生改变,即可检测到越界操作错误。释放重新改写内存释放函数free,释放时节点从HASH表中删除并进行越界检测。查看手动调用show_memory()或show_memory_summary()查看内存使用情况并进行越界检测。以下涉及内存分配和内存释放的函数被重新改写:malloccallocreallocstrdupstrndupasprintfvasprintfHASH表如下图所示:节点结构如下:staticstructmm_region{structmm_region*next;charfile[40];/*分配所在的文件*/charfunc[40];/*分配所在的函数*/unsignedintlineno;/*分配所在的行*/size_tlen;/*内存分配的大小*/unsignedintfence;/*内存起始边界,用于头越界检测*/unsignedchardata[0];/*用户内存分配首地址,malloc等函数返回以此为首地址的len长度的一块内存*/}*regions[SOME_PRIME];内存中一条节点的结构:……nextfilefunclinenolenfence0xdeadbeefdatafence0xdeadbeef……mm_region内存起始边界检测头越界内存结束边界检测尾越界测试步骤:引入头文件:在需要检测的C/C++文件中引入”mm.h”头文件;查看内存使用情况:调用show_memory()函数查看本文件中内存泄漏详细情况,或调用show_memory_summary()函数查看本文件中内存泄漏统计情况。内存泄漏测试代码#include<stdio.h>/*加入头文件mm.h*/#include"mm.h"intmain(intargc,char*argv[]){char*mp=NULL;char*cp=NULL;mp=(char*)malloc(6);cp=(char*)calloc(1,10);/*查看内存泄漏*/show_memory();show_me