




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 一个动态内存管理模块的实现摘要:实现了一种全集成可变带宽中频宽带低通滤波器,讨论分析了跨导放大器-电容(OTAC)连续时间型滤波器的结构、设计和具体实现,使用外部可编程电路对所设计滤波器带宽进行控制,并利用ADS软件进行电路设计和仿真验证。仿真结果表明,该滤波器带宽的可调范围为126 MHz,阻带抑制率大于35 dB,带内波纹小于05 dB,采用18 V电源,TSMC 018m CMOS工艺库仿真,功耗小于21 mW,频响曲线接近理想状态。关键词:Butte摘要:介绍一个动态内存管理模块,可以有效地检测C程序中内存泄漏和写内存越界等错误,适用于具
2、有标准C语言开发环境的各种平台。关键词:C语言 动态内存 内存泄漏 写越界引言 当前,绝大多数嵌入式平台上的软件都采用C语言编写。除了代码简洁、运行高效之外,灵活操作内存的能力更是C语言的重要特色。然而,不恰当的内存操作通常也是错误的根源之一。如“内存泄漏” 不能正确地释放已分配的动态内存,就是一种非常难于检测的存错误。持续的内存泄漏会使程序性能下降到最终完全不能运行,进而影响到所有其它有动态内存需求的程序,在某些相对简单的嵌入式平台上甚至会妨碍操作系统的运转。再如“写内存越界”,一种不合法的写内存操作,极可能破坏到本程序中正在使用的其它数据,严重的时候还可
3、能对其它正在运行的程序甚至整个系统造成影响。为此,本文介绍一个增强的、可定制的动态内存管理模块(以下不妨简称Fense),在 C语言提供的内存分配函数基础上,增加了对动态内存的管理功能;能记录软件运行过程中出现的内存泄漏信息,同时也具一定的监测内存操作的能力;可以发现绝大多数对动态内存的写越界错误。1 Fense的设计原理 Fense 通过设立一个双向链表(struct Head *stHead)来保存所有被分配的动态内存块的信息。链表中的每个节点对应一个动态内存块,节点中包括此内存大小、分配发生时所在的源文件名和行号以及被释放的时候,Fense又从st_H
4、ead中删除之,检查st_Head中的节点即可得到未被释放的本节点的数值校验和等。Fense将每一个分配的动态内存块插入到链表st_Head中;当此内存放内存块信息。链表节点结构定义如下:struct Headchar file; /分配所在源文件名*/unsigned long line; /*分配所在的行号*/size_t size; /*分配的内存大小*/int checksum; /*链表节点校验和*/struct Head prev,next; /*双链表的前后节点指针*/;/*全局的双向链表*/struct Head *st_Head=NULL;
5、 为了检测写越界的错误,Fense在用户申请的内存前后各增加了一定大小的内存作为监测区域,并初始化成预定值。这样,当程序发生越界写操作时,预定值就会发生改变,Fense即可检测到错误。 通过Fense分配到的动态内存结构如图1所示。由此可知,Fense_Malloc(Fense的内存分配函数)返回给用户的指针ptr指向的是用户申请内存区域的起始位置。链表节点、前/后监测区域均为Fense内部使用,是用户不可见的。2 用户定制选项Fense有5组宏定义提供给用户对功能进行定制。各组选项控制意义如下:WARN_ON_ZERO_MALLOC 用户申请零分配空间时警
6、告信息。FILL_ON_MALLOC 分配时初始化内存块FILL_ON_MALLOC_VAL 分配初始化时的预设值FILL_ON_FREE 释放时填充内存块FILL_ON_FREE_VAL 释放时填充内存块的预设值 以上4个选项的主要功能是初始化刚分配到的内存和刚被释放的内存为预设值,尽可能地避免出现因使用未初始经的内存而引发的错误。FENSE_FRONT_SIZE 定义前监测区域大小FENSE_FRONT_VAL 定义前监测区域的预设值FENSE_END_SIZE 定义后监测区域大小FENSE_END_VAL 定义后监测工域的预设值
7、 在Fense 工作过程中,对内存越界写操作的检验是通过比较监测区域的当前值与本监测区域的预设值来确定的。显然不能排除这样一种可能:即发生在监测区域的越界写操作写入的数值与监测区域的预设值恰好相同,此时,Fense无法发现错误的发生。对于这种情况,用户可以通过更改监测区域预设值(FENSE_FRONT_VAL和FENSE_END_VAL)和监测区域大小(FENSE_FRONT_SIZE和FENSE_END_SIZE)为多组不同的值来反复测试,这样就可以大幅度地提高监测的准确性。VALIDATE_FREEfree是检查本内存块是否在链表中CHECK_ALL_MEMORY_ON_FRE
8、Efree时检查链表中的所有内存块 由于存在这样一种情况:对内存块A的写操作出现了越界错误,写到了另一内存块B的区域内。此时,仅仅检查内存块A的有效性就无法发现问题,如果同时检查所有的动态内存块,则有可能发现错误所在。以上选项即为此而设。FENSE_LOCK 获取对链表st_Head的操作权FENSE_UNLOCK 释放对链表st_Head的操作权 考虑到的在多线程环境中,可能有多个线程同时用Fense进行内存管理,而Fense使用的链表st_Head是全局变量,因此提供了以上2个宏来实现对 st_Head的互斥访问。宏的
9、具体定义依赖于用户所在的软件环境,用户可自行实现。对于单线程系统,仅需将这2个宏定义为空即可。 为便于使用,Fense的头文件中还包括了以下定义,使得用户基本不用改动现有的源代码就可引入Fense。#define malloc(size) Fense_Malloc(size,_FILE_,_LINE_)#define free(ptr) Fense_Free(ptr,_FILE_,_LINE_)#define realloc(ptr,new_size) Fense_Realloc(ptr,new_size,_FILE_,_LINE_)#define coll
10、oc(num,size) Fense_Calloc(num,size,_FILE_,_LINE_)3 运行时控制 Fense 监测内存的功能可以在运行动态地开关。此功能通过将全局变量st_Disbaled赋值为零或非零来实现。在调试过程中,可以在调试器中即时修改 st_Disabled的值来控制Fense的行为,省去了重编译源代码的需要。对于那些需要大量编译时间的大型工程或交叉平台开发的软件项目来说,这是非常有利的。4 Fense的具体实现 Fense 提供Fense_Malloc、Fense_Free、Fense_Rea
11、lloc及Fense_Calloc等内存管理函数,功能和调用形式与C语言中的malloc、free、realloc和calloc保持一致。限于篇幅,这里仅对Fense_Malloc和Fense_Free的实现过程做一个简单描述,具体实现请见本刊网络补充版。/*内存分配函数*/void *Fense_Malloc(size_t size,char *file,unsigned long line)/检查Fense的运行时开关,如果Fense被关闭,则调用malloc/分配并返回/检查是否零分配,如有则提示警告信息后返回0(用户定制选项)/分配内存,包括链表节点区域和前/后监测区域/初始化链表节点
12、,保存分配内存的信息,包括分配的大小、所在文件名和行号/将此节点插入链表st_Head/为本节点区域计算校验和/用预设值初始化前/后监测区域/用预设值填充用户内存区域(用户定制选项)/返回用户内存区域的起始位置/*内存释放函数*/void Fense_Free(void *uptr,char *file,unsigned long line)/检查Fense的运行时开关,如果Fense初关闭,则调用free释译并返回/检查所有Fense管理下的动态内存(用户定制选项)/判断当前内存块是否在链表st_Head中,如果不在则提示/警靠信息,退出(用户定制选项)/检查当前内存块是否存在越界操作/将当前内存块的相应的链表节点从st_Head中删除/重新计算当前节点的前后相邻节点的校验和/用预设值填充被释放的内存区(用户定制选项)/调用free释放当前的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 家庭教育指导服务行业市场需求与竞争格局分析报告
- 保险中介公司管理办法
- 乡镇农村卫生管理办法
- 保洁信息服务管理办法
- 企业项目费用管理办法
- 企业三微一网管理办法
- 人工繁育鹦鹉管理办法
- 住院发票遗失管理办法
- 企业自持资产管理办法
- 企业采购费用管理办法
- 地坪材料推广活动方案
- 音乐数据分析与用户行为研究-洞察阐释
- 2025至2030中国电子级磷酸行业市场发展分析及市场需求与投资方向报告
- 2024年成都农业科技中心招聘笔试真题
- 2025年陕西省中考英语试题卷(含答案)
- 中国锂离子电池隔膜行业发展白皮书(2025年)
- 射频消融术治疗心律失常讲课件
- 《危险货物港口作业重大事故隐患判定指南》解读与培训
- 虚幻引擎介绍课件
- 2024年常德市安乡县教育局选调工作人员笔试真题
- 财产申报表-被执行人用
评论
0/150
提交评论