2

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

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

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

我们在这里找到了描述内存 RTOS 功能的文档, 第 4 章描述了这些功能。

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

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

  • 使所有块大小与最大分配相同。 我们有很多开销,因为最小和最大的分配差别很大。
  • 不要做免费的。 这是没有办法的,会出现内存泄漏。

希望有人可以帮助我们。如果有不清楚的地方,请问我

提前致谢

4

1 回答 1

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

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

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

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

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

  • 固定大小的块内存池不需要为每个分配存储分配元数据,描述诸如已分配块大小之类的特征。特别是对于小的分配,这提供了大量的空间节省。

于 2012-05-23T10:09:12.193 回答