无需使用堆存储器即可进行高速CAN数据处理

时间:2019-03-18 13:07:03

标签: c++ c multithreading

我有一个情况:

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

模块“ A”接收高速数据(20毫秒)并发送。模块“ B”的线程之一接起。

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

现在数据假设在模块“ B”中,而处理需要一些位操作,当我们发送数据时,将为每个CAN(CONTROLER AREA NETWORK)数据使用堆分配,因为每个数据都有自己的数据内存,因此每次data(20ms)进入B模块内部时,都会创建一个堆内存。因此,有很多堆使用情况。

我不能使用局部变量,因为其他模块对此一无所知。

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

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

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

如果有人不完全了解它,请让我知道,我将尝试重新阐述该问题。请原谅我的英语水平

1 个答案:

答案 0 :(得分:0)

您问:

  

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

是的,但是有太多的方法可以实现,而不是指向一个解决方案。

最简单的方法可能是使用标准库容器,然后使用其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

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