我们正在使用Micrium的μC/ OS-III RTOS和Renesas的RX62N。
我们构建了一个系统,我们必须动态分配和释放数据。我们发现函数 malloc()和 free()与RTOS不兼容。 然而,RTOS具有自定义功能; Mem_HeapAlloc()功能。 此函数分配RTOS'made 'heap'的一些内存。问题是它没有自由功能,可能是因为所有内容都进入堆池。
在RTOS中,也可以建立一个池。该池的问题是所有包含的块需要具有相同的大小。由于我们正在分配和释放不同的大小,这对我们来说不是一个好的解决方案。
我们找到了一个描述内存RTOS函数的文档HERE 第4章介绍了这些功能。
有人知道我们如何解决这个问题吗?
我们已经拥有的一些解决方案
希望有人能帮助我们。如果问题不明确,请问我
提前致谢
答案 0 :(得分:2)
you can allocate your objects in multiples of block sizes.
您仍然会有一些内部碎片,因此您将无法充分利用可用空间。
使用内存池仍然具有以下优势
内存池允许内存分配具有恒定的执行时间(无碎片)。如果使用malloc为每个对象分配内存,则池中数千个对象的内存释放只是一个操作,而不是一个一个。
内存池可以按层次结构树结构分组,适用于特殊的编程结构,如循环和递归。
固定大小的块内存池不需要为每个分配存储分配元数据,描述分配块大小等特征。特别是对于小额分配,这可以节省大量空间。