gpt4 book ai didi

arduino - 有没有办法处理 AVR/Arduino 微 Controller 中的堆内存碎片?

转载 作者:行者123 更新时间:2023-12-05 01:00:40 25 4
gpt4 key购买 nike

我一直在寻找几天现在没有任何运气。

堆内存碎片是在微 Controller /Arduino 中大量使用 malloc() 和 free() 的结果。

如果使用它们是不可避免的,我如何不时对堆进行碎片整理以确保下一次 malloc() 调用会找到要分配的连续内存?

最佳答案

创建一个固定大小的内存块池。当您需要任何数量的内存时,从池中分配一个 block 并使用您需要的部分。完成后,将 block 返回到池中。池永远不会碎片,因为 block 总是相同的大小。如果有任何 block 可用,那么它们的大小总是正确的。有时你只需要几个字节,然后你会认为你浪费了整个 block 。但是你会记得你正在避免内存碎片,你会感觉更好。

如果分配的大小变化很大,那么一个固定大小的内存池可能真的太浪费了。然后,您可以为小型、中型和大型 block 创建两个或三个固定大小的内存池。但请确保将 block 返回到您从中获取它们的同一池中。

使用队列或链表来组织池中的 block 。这些 block 在分配时从队列/列表中删除。当它们被释放时,它们会返回到队列/列表中。

关于arduino - 有没有办法处理 AVR/Arduino 微 Controller 中的堆内存碎片?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29322723/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com