与普通数组相比,向量的内存访问速度有多快?

时间:2014-06-08 14:12:55

标签: c++ arrays audio optimization vector

我有一个被称为每秒数千次的功能(这是一个音频效果),我需要一个缓冲区来写入和读取音频数据。将浮点数组声明为普通数组或向量?

之间在性能上是否存在相当大的差异?

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

declaration:
  int size;  
  float *buffer;

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

~destroy()
{
  delete [] buffer;
}

1 个答案:

答案 0 :(得分:1)

动态分配内存的成本很低,后期的重新分配也是如此,但您已经说明了new的使用情况,因此您的成本相当于vector的初始大小或{{1}以各种方式打电话。

一旦分配,任何优化的构建中的操作都可以被视为快速,但是如果您有任何理由需要关注,您应该自我描述。

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