gpt4 book ai didi

c - 嵌入式系统上分层通信堆栈的内存管理

转载 作者:太空宇宙 更新时间:2023-11-04 07:49:05 25 4
gpt4 key购买 nike

关闭。这个问题需要更多 focused .它目前不接受答案。












想改进这个问题?更新问题,使其仅关注一个问题 editing this post .

2年前关闭。




Improve this question




这个问题与嵌入式系统上的编程有关。
我正在研究嵌入式设备上的实验性通信堆栈。
堆栈从底层 channel 接收流数据,检测离散数据包,重新组装碎片数据等......

每个功能都在单独的层中实现。
某些层延迟数据包的处理(因为数据到达中断处理程序并进一步
处理被卸载到主上下文中)。
一些层将多个传入数据包合并为一个转发到下一个上层的数据包(即碎片数据的重组)。
因此,一些层将一个传入数据包拆分为多个数据包,然后转发到下一个较低层。
当然,任何层都可能在任何时候丢弃数据包,而无需另行通知,因为例如校验和与数据不匹配。

我的问题是关于这些数据包的内存分配。

目前,我在每一层都使用 malloc 。具体来说,我为要转发到下一层的数据包分配内存,
将指针传递给下一层的处理程序,并在调用后再次释放内存。这是下一层的处理程序的责任
复制所需的数据。因此,每一层都维护分配的数据的所有权,并且很难忘记释放分配的内存。
这工作得很好,但会导致很多不必要的副本。

或者,我可以将缓冲区的所有权转发给下一层。然后下一层可以直接在缓冲区上做它的工作并转发
相同的缓冲区到下一层,依此类推。我想这有点棘手,因为没有内存泄漏。

最终,因为它是嵌入式设备,我想找到一个没有动态内存分配的解决方案。如果每一层都拥有自己的内存所有权,那么没有 malloc 的实现应该很容易。但如果所有权被传递,那么它似乎更复杂。

你有什么意见吗?

最佳答案

查看 LwIP 数据包缓冲区 (pbuf),它可以解决您的场景中提到的情况。
http://www.nongnu.org/lwip/2_0_x/group__pbuf.html
为了增强由 ISR 执行的代码,您可以实现内存池而不是 malloc。

关于c - 嵌入式系统上分层通信堆栈的内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54998104/

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