如何设计固定时间长度的循环缓冲区

how to design a fixed TIME length circular buffer?

本文关键字:循环 循环缓冲 缓冲区 定时间      更新时间:2023-10-16

boost::circular_buffer cann 提供了一个固定长度的缓冲区,例如大小为 5。

成像我有带有时间戳的实时数据流。我想保留过去 5 分钟内所有 elemens 的缓冲区。

天真地,我可以构建一个 std::list 的包装器,每次有一个新的数据点 D 进入时,我都会push_back(D(,然后做一个 while 循环来pop_front(( 所有超过 5 分钟的数据点。

这种设计的问题在于,我必须为每个点构建一个新实例,这似乎是浪费时间(这是一个使用量很大的对象(

这里有人有更优雅的解决方案吗?

谢谢!

列表或双端都适用于环形缓冲区。如果你的对象是微不足道的可复制的,而且很小,你可以只使用deque,可能不用担心内存实例。 如果您有更大的数据,则可以使用列表和自定义对象池(以便将来添加旧的未使用对象

(。

如果您不喜欢 std 集合对象池语义(在 C++11 之前很糟糕,我现在不确定(,那么您可以简单地将指针存储在 deque 中并管理您自己的内存。