最有效的写缓冲区的方式
Most efficient way to write a buffer
我必须写一个音频缓冲区,它被逐渐填充/读取。
现在我用
m_outputBuffer.erase(
m_outputBuffer.begin(),
m_outputBuffer.begin()+read_samples);
当从缓冲区读取read_samples
样本时(我必须清除它以释放RAM)。但我知道erase()
是非常昂贵的,所以我有什么替代方案,考虑到我基本上只需要将指针移动到缓冲区的第一个元素并释放开始的元素?
std::deque
似乎是一个容器,最适合这样的东西。std::deque
是一个随机访问容器,像std::vector
一样,但在容器的开始(平销)有恒定的插入和删除复杂性,不像std::vector
(以及在容器的末尾)。
最后我还是用
m_outputBuffer.erase(
m_outputBuffer.begin(),
m_outputBuffer.begin()+read_samples);
,因为它真的很有效:擦除是在一个块中完成的,剩下的数据在我的向量的开始被重新定位,因此没有指针改变。
不要使用c++。用C写,当然C也是c++的一个子集。
缓冲区由一个内存区域和两个指针组成,一个指向开始位置,一个指向结束位置。当数据传入时,将其添加到结束指针,直到换行。当数据输出时,增加读指针。您永远不需要删除或擦除数据。如果缓冲区溢出,很可能意味着出现了问题,您需要关闭系统——扩展它只会延长崩溃过程。
相关文章:
- C++字符*缓冲区的大小
- 如何在c++中为模板函数实例创建快捷方式
- 为什么msgrcv()将垃圾字符馈送到缓冲区
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- ostream过载时的缓冲区冲洗
- C++中的高效循环缓冲区,它将被传递给C样式数组函数参数
- 在c代码之间共享数据的最佳方式
- 在C++中将函数压缩为两种方式
- 以螺旋方式打印矩阵的程序.(工作不好)
- Xaudio2在更改缓冲区或循环时弹出声音
- 如何使 printf 以与 NSLog 相同的方式打印字符缓冲区?
- 用于了解输入和输出流缓冲区实际工作方式的程序
- 跨平台套接字发送,Linux 上的缓冲区常量无效* Windows上的常量字符*,最佳处理方式
- 协议缓冲区 - 为什么 int32 和 sint32 以相同的方式映射
- 将C++缓冲区复制到Python的最佳方式
- 为什么VxWorks中的缓冲区sendto()和send()函数的类型不同,以及我如何以相同的方式处理它们
- 在C++中,在窗口中播放示例缓冲区最常见的方式是什么
- 对缓冲区使用正确的对齐方式,该缓冲区应该容纳C++中的结构
- 将Google协议缓冲区(protobuf)与Matlab结合使用的最佳方式
- 最有效的写缓冲区的方式