导航路径规划之六 内存管理模块

本文探讨了在路径规划算法中频繁使用malloc/new导致的性能问题和内存碎片,提出采用内存池技术来改善。内存池通过预先分配大块内存并切割成固定大小的单元,提高了内存分配效率,减少了碎片。文中详细介绍了内存池的工作原理、固定内存池的使用,以及内存的分配、扩展和回收过程。
摘要由CSDN通过智能技术生成

在路径规划算法中,每扩展一个节点,就需要利用malloc/new函数申请一小块内存,以保存该扩展节点的相关信息放入open表中,因此可以说malloc/new是非常频繁的调用,对于远距离的路径规划,可能会扩展10万个以上的节点,因此就会调用10万次以上的malloc/new函数。

利用默认的内存管理函数new/delete或malloc/free在堆上分配和释放内存会有一些额外的开销。系统在接受到分配一定大小的内存请求时,首先查找内部维护的内存空闲块表,并且需要根据一定的算法(例如分配最先找到的不小于申请大小的内存块给请求者,或者分配最适宜于申请大小的内存,或者分配最大空闲的内存块等)找到合适大小的空闲内存块。如果该内存块过大,还需要切割成已分配的部分和较小的空闲块。然后系统更新内存空闲块表,完成一次内存分配。类似地,在释放内存时,系统把释放的内存块重新加入到空闲内存块表中。如果可能的话,可以把相邻的空闲块合并成比较大的空闲块。

       默认的内存管理函数还需要考虑到多线程的应用,需要在每次分配和释放内存时加锁,同样也增加了开销。

       默认的分配和释放内存算法虽然也考虑了性能,然而这些内存管理函数的算法的通用版本为了应付更复杂、更广泛的情况,需要做更多的额外工作。

       可见,如果路径规划函数频繁地在堆上分配和释放内存,则会导致性能上的损失。并且会导致系统中出现大量的内存碎片。我们需要采用内存池的管理方法来提高程序的性能。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值