我们使用 Micrium 的 μC/OS-III RTOS 和 Renesas 的 RX62N。
我们构建了一个必须动态分配和释放数据的系统。我们发现了功能malloc() and free()与 RTOS 配合得不好。
然而,RTOS 为此提供了一个自定义函数;这Mem_HeapAlloc()功能。
该函数分配 RTOS 的一些内存'heap'。问题是它没有自由功能,可能是因为一切都进入了堆池.
在 RTOS 中,还可以创建一个池。该池的问题是所有包含的块需要具有相同的大小。由于我们分配和释放不同的大小,这对我们来说不是一个好的解决方案。
我们找到了一个描述内存 RTOS 功能的文档HERE http://www.2shared.com/document/w4jSSx96/uC-LIB-Manual.html第 4 章介绍了这些功能。
有人知道我们如何解决这个问题吗?
我们已经有了一些解决方案
-
使所有块大小与最大分配相同。由于最小和最大分配差异很大,因此我们有很多开销。
-
不要做免费的。这是没有办法解决的,会出现内存泄漏。
希望有人可以帮助我们。如果有什么不清楚的请问我
提前致谢
-
you can allocate your objects in multiples of block sizes.
您仍然会有一些内部碎片,因此您将无法充分利用可用空间。
使用内存池仍然具有以下优势
内存池允许以恒定的执行时间(无碎片)进行内存分配。池中数千个对象的内存释放只是一次操作,而不是使用malloc为每个对象分配内存时一个一个的操作。
内存池可以按层次树结构分组,适用于循环和递归等特殊编程结构。
固定大小的块内存池不需要存储每次分配的分配元数据,描述分配块的大小等特征。特别是对于小型分配,这可以节省大量空间。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)