c++ - 与普通数组相比,对 vector 的内存访问速度有多快?

标签 c++ arrays audio optimization vector

我有一个每秒调用数千次的函数(这是一个音频效果),我需要一个缓冲区来写入和读取音频数据。将 float 组声明为普通数组或 vector 在性能上有很大差异吗?

声明后,我的数组在音频循环期间不会调整大小,但在初始化阶段我不知道确切的长度,因为它取决于音频采样率。因此,例如,如果我需要一个 2 秒的音频缓冲区以实现 44100 Hz 的采样率,我通常会这样做:

declaration:
  int size;  
  float *buffer;

void init (int sr)
{
  size = sr * 2;
  buffer = new float[size]();
}

~destroy()
{
  delete [] buffer;
}

最佳答案

动态分配内存的成本很小,稍后的释放也是如此,但是您已经说明了 new 的使用,因此您的成本相当于 vector以各种方式调用初始大小或reserve

一旦分配,操作在任何优化的构建中都可以预期一样快,但如果您有任何理由关心,您应该 self 介绍。

它与您的-ing 代码无关,但仅供引用,由于寻址至少存在潜在差异 - 全局或静态数组可能在编译时具有已知的虚拟地址,并且堆栈基于数组的数组可能位于距堆栈指针的已知偏移量处,但在大多数体系结构中,这些数组与相对于运行时确定的指针的索引之间没有明显的性能差异。

关于c++ - 与普通数组相比,对 vector 的内存访问速度有多快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24107001/

相关文章:

c++ - Visual C++ 应用程序在窗体后面打开一个命令提示符

c++ - 在 QTextEdit 中设置行间距

c++ - 这会得到优化吗?

在纯c中,在线程中更改数组/结构/..的部分而不阻塞整个事情

JavaScript : Make an array of value pairs form an array of values

android - MediaRecorder 捕获的音频文件在使用 Retrofit 2 发送到服务器后损坏

c - Solaris 音频 API

c++ - 将表示二维数组的 std::vector<std::vector <double>> 转换为 cv::Mat

arrays - 在 MATLAB 中创建一个对角线和左对角线全为 1 的矩阵

matlab - Matlab-绘制过滤后的音频