MicriμmμC/ OS-III RTOS中的分配和自由

时间:2012-05-23 09:47:14

标签: c memory-management rtos micrium ucos

我们正在使用Micrium的μC/ OS-III RTOS和Renesas的RX62N。

我们构建了一个系统,我们必须动态分配和释放数据。我们发现函数 malloc() free()与RTOS不兼容。 然而,RTOS具有自定义功能; Mem_HeapAlloc()功能。 此函数分配RTOS'made 'heap'的一些内存。问题是它没有自由功能,可能是因为所有内容都进入堆池

在RTOS中,也可以建立一个池。该池的问题是所有包含的块需要具有相同的大小。由于我们正在分配和释放不同的大小,这对我们来说不是一个好的解决方案。

我们找到了一个描述内存RTOS函数的文档HERE 第4章介绍了这些功能。

有人知道我们如何解决这个问题吗?

我们已经拥有的一些解决方案

  • 使所有块大小与最大分配相同。 我们有很多开销,因为最小和最大的分配差异很大。
  • 不要免费。 这不是解决方案,会有内存泄漏。

希望有人能帮助我们。如果问题不明确,请问我

提前致谢

1 个答案:

答案 0 :(得分:2)

  • you can allocate your objects in multiples of block sizes.

您仍然会有一些内部碎片,因此您将无法充分利用可用空间。

使用内存池仍然具有以下优势

  • 内存池允许内存分配具有恒定的执行时间(无碎片)。如果使用malloc为每个对象分配内存,则池中数千个对象的内存释放只是一个操作,而不是一个一个。

  • 内存池可以按层次结构树结构分组,适用于特殊的编程结构,如循环和递归。

  • 固定大小的块内存池不需要为每个分配存储分配元数据,描述分配块大小等特征。特别是对于小额分配,这可以节省大量空间。