gpt4 book ai didi

c++ - 不使用堆内存的高速 CAN 数据处理

转载 作者:行者123 更新时间:2023-11-30 16:20:40 29 4
gpt4 key购买 nike

我有一个情况:

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

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

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

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

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

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

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

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

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

最佳答案

你问:

Is there any way , I can avoid the heavy use of dynamic memory allocation? (edit mine)

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

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

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

关于c++ - 不使用堆内存的高速 CAN 数据处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55222127/

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