gpt4 book ai didi

c++ - 实时应用的数据结构

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:26:02 25 4
gpt4 key购买 nike

我们正在使用 c++ 设计一个 p2p 应用程序,它使用 UDP 将语音传输到其他对等点。

我们在线程中在缓冲区中捕获麦克风信号,该线程在 while 循环中捕获一秒钟的语音。对于缓冲区中每秒捕获的语音,它将其拆分为数据包发送到其他对等点。现在我需要在目的地有一个合适的数据结构来处理实时传输。我将用于屏幕捕获的相同数据结构。下面是我想到的两种使用队列的方法

  • 使用链表实现队列,该链表维护 OneSecVoice 对象或 Image 对象(如果是图像)的队列。

  • 使用 OneSecVoiceImage 对象的静态数组实现队列

OneSecVoice/Image 对象将包含数据包总数,特定Image/OneSecVoice 的数据包缓冲区>.

因为它是实时的,一个线程将连续扫描队列取出最新的完整 Image/OneSecVoice 通过弹出 图片/OneSecVoice 来自队列。

那么选择使用链表实现队列还是使用静态数组实现队列

我和我的 friend 为此争论不休,所以我们决定在这里发帖。

最佳答案

我会使用 boost::circular_buffer .您将获得具有固定内存区域且没有意外内存分配的缓存优势。

In order to achieve maximum efficiency, the circular_buffer stores its elements in a contiguous region of memory, which then enables:

  1. Use of fixed memory and no implicit or unexpected memory allocation.
  2. Fast constant-time insertion and removal of elements from the front and back.
  3. Fast constant-time random access of elements.
  4. Suitability for real-time and performance critical applications.

Possible applications of the circular_buffer include:

  • Storage of the most recently received samples, overwriting the oldest as new samples arrive.
  • As an underlying container for a bounded buffer (see the Bounded Buffer Example).
  • A kind of cache storing a specified number of last inserted elements.
  • Efficient fixed capacity FIFO (First In, First Out) or LIFO (Last In, First Out) queue which removes the oldest (inserted as first) elements when full.

关于c++ - 实时应用的数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1551333/

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