0424

释放一个内存块,OSMemPut()

  1. 当用户应用程序不再使用一个内存块时,必须及时地把它释放并放回到相应的内存分区中。这个操作由OSMemPut()函数完成。必须注意的是,OSMemPut()并不知道一个内存块是属于哪个内存分区的。例如,用户任务从一个包含32字节内存块的分区中分配了一个内存块,用完后,把它返还给了一个包含120字节内存块的内存分区。当用户应用程序下一次申请120字节分区中的一个内存块时,它会只得到32字节的可用空间,其它88字节属于其它的任务,这就有可能使系统崩溃。  
  2. 程序清单 L7.5是OSMemPut()函数的源代码。它的第一个参数pmem是指向内存控制块的指针,也即内存块属于的内存分区[L7.5(1)]。OSMemPut()首先检查内存分区是否已满[L7.5(2)]。如果已满,说明系统在分配和释放内存时出现了错误。如果未满,要释放的内存块被插入到该分区的空闲内存块链表中[L7.5(3)]。最后,将分区中空闲内存块总数加1[L7.5(4)]。  
  3.   
  4. 程序清单 L7.5 OSMemPut()  
  5. INT8U OSMemPut (OS_MEM  *pmem, void *pblk)                     (1)  
  6. {  
  7.     OS_ENTER_CRITICAL();  
  8.     if (pmem->OSMemNFree >= pmem->OSMemNBlks) {                  (2)  
  9.         OS_EXIT_CRITICAL();  
  10.         return (OS_MEM_FULL);  
  11.     }  
  12.     *(void **)pblk      = pmem->OSMemFreeList;                  (3)  
  13.     pmem->OSMemFreeList = pblk;  
  14.     pmem->OSMemNFree++;                                        (4)  
  15.     OS_EXIT_CRITICAL();  
  16.     return (OS_NO_ERR);  
  17. }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值