我有一个情况:
基本上有3个名为“ A”,“ B”,“ C”的模块。 每个模块都涉及多线程。
模块“ A”接收高速数据(20毫秒)并发送。模块“ B”的线程之一接起。
模块'B'提取相关数据并进行一些位操作活动并将其广播,以便模块'C'的任何一个线程都可以拾取并执行自己的活动。
现在数据假设在模块“ B”中,而处理需要一些位操作,当我们发送数据时,将为每个CAN(CONTROLER AREA NETWORK)数据使用堆分配,因为每个数据都有自己的数据内存,因此每次data(20ms)进入B模块内部时,都会创建一个堆内存。因此,有很多堆使用情况。
我不能使用局部变量,因为其他模块对此一无所知。
我也尝试使用static / global,但是缺点是因为数据很快。到静态变量获取数据并传递到将要广播的函数时,数据可能会被更新为新值(并且可能会丢失数据)。
我也不能使用锁定系统,因为每个模块将具有不同的线程并且上下文将不同。
有什么办法可以避免使用动态内存分配吗?
如果有人不完全了解它,请让我知道,我将尝试重新阐述该问题。请原谅我的英语水平
答案 0 :(得分:0)
您问:
有什么办法可以避免繁重使用动态内存分配吗? (编辑我的)
是的,但是有太多的方法可以实现,而不是指向一个解决方案。
最简单的方法可能是使用标准库容器,然后使用其reserve
(请参阅https://en.cppreference.com/w/cpp/container/vector/reserve)功能(或仅依赖指数增长)。
https://en.cppreference.com/w/cpp/container
我的猜测是您会寻找vector或unordered-map来满足您的需求。
https://en.cppreference.com/w/cpp/container/vector
https://en.cppreference.com/w/cpp/container/unordered_map
其他有助于解决此类问题的概念包括circular-buffer或memory-pool