内存管理 第7章 内存管理 1 7.0 内存控制块 1 7.1 建立一个内存分区,OSMemCreate() 3 7.2 分配一个内存块,OSMemGet() 6 7.3 释放一个内存块,OSMemPut() 7 7.4 查询一个内存分区的状态,OSMemQuery() 8 7.5 Using Memory Partitions 9 7.6 等待一个内存块 11 内存管理 我们知道,在ANSI C中可以用malloc()和free()两个函数动态地分配内存和释放内存。但是,在嵌入式实时 操作系统中,多次这样做会把原来很大的一块连续内存区域,逐渐地分割成许多非常小 而且彼此又不相邻的内存区域,也就是内存碎片。由于这些碎片的大量存在,使得程序 到后来连非常小的内存也分配不到。在4.02节的任务堆栈中,我们讲到过用malloc()函 数来分配堆栈时,曾经讨论过内存碎片的问题。另外,由于内存管理算法的原因,mall oc()和free()函数执行时间是不确定的。 在µC/OS- II中,操作系统把连续的大块内存按分区来管理。每个分区中包含有整数个大小相同的 内存块,如同图F7.1。利用这种机制,µC/OS-II 对malloc()和free()函数进行了改进,使得它们可以分配和释放固定大小的内存块。这 样一来,malloc()和free()函数的执行时间也是固定的了。 如图 F7.2,在一个系统中可以有多个内存分区。这样,用户的应用程序就可以从不同的内存 分区中得到不同大小的内存块。但是,特定的内存块在释放时必须重新放回它以前所属 于的内存分区。显然,采用这样的内存管……