首页 > 解决方案 > 不使用堆内存的高速 CAN 数据处理

问题描述

我有一个情况:

基本上有3个模块命名为'A','B','C'。每个模块都涉及多线程。

模块“A”获取高速数据(20ms)并发送。模块“B”的线程之一拾取。

模块“B”提取相关数据并进行一些位操作活动并将其广播,以便模块“C”的任何一个线程拾取并执行其自己的活动。

现在假设模块'B'中的数据在处理时需要一些位操作,当我们发送数据时,每个CAN(控制器区域网络)数据都使用堆分配,因为每个数据都有自己的内存,所以每次数据(20ms)进入 B 模块时,都会创建一个堆内存。因此,堆使用量很大。

我不能使用局部变量,因为其他模块不知道它。

我也尝试使用静态/全局,但缺点是因为数据很快。当静态变量获取数据并传递给将要广播的函数时,数据可能会更新为新值(并且可能会丢失数据)。

我也不能使用锁定系统,因为每个模块都会有不同的线程并且上下文也不相同。

有什么办法,可以避免使用动态内存分配?

如果有人不完全理解它,请告诉我,我会尝试再次重新构建问题。请原谅我的英语

标签: c++cmultithreading

解决方案


您问:

有什么办法可以避免大量使用动态内存分配?(编辑我的

是的,但是有太多的方法可以做到这一点,而不是指向一个单一的解决方案。

最简单的可能是标准库容器,然后使用它们的reserve(参见https://en.cppreference.com/w/cpp/container/vector/reserve)功能(或仅依赖指数增长)。

https://en.cppreference.com/w/cpp/container

我的猜测是你会寻找来满足你的需要。

https://en.cppreference.com/w/cpp/container/vector

https://en.cppreference.com/w/cpp/container/unordered_map

其他有助于解决此类问题的概念包括


推荐阅读