tag 标签: 内存控制

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