Keil C51的动态内存管理机制分析与改进 Keil C51动态内存管理机制分析及改进 作者:重庆电力高等专科学校 丁明亮 熊真春 阅读:311 引用:0 发布时间:2007-07-04 08:30 出处:单片机及嵌入式系统应用 Keil C51是常用的嵌入式系统编程工具,它通过init_mempool、mallloe、free等函数,提供 了动态存储管理等功能。本文通过对init_mempool、mallloe和free这3个Keil C51库函数源代码的分析,揭示其实现的原理和方法,并对其中的不足作了改进,以使K eil C编程人员更好地应用动态存储管理。 1 相关数据结构、变量及说明 在Keil C51安装目录下的\c5l\lib目录下,有实现init_mempool、mallloe和free这3个函数的 C源文件init_mere.c、malloc.c和free.c。下面针对Keil C7.5A版,将其中与动态存储管理相关的数据结构介绍如下: [pic] 该结构的next指向堆中的下一空闲内存块,len表示该空闲块除去该块首部的struct __mem__结构所占的字节数后,该块实际可用的字节数。由于next是一个指向XDATA区的 指针,故在Keil C51中应用程序所定义的堆空间应在XDATA区中定义。 在Keil C51中,堆中的所有空闲内存块是用一个单链表来管理的,struct_mere_即为该链表结点 的结构,后面定义的宏AVAIL为该链表的首结点,为叙述方便,以下将该链表称为AVAIL 链表。 [pic] #define AVAIL(__meM_avaiL_[O]) 全局数……