繁体   English   中英

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

[英]How fast is memory access to a vector compared to a normal array?

我有一个每秒调用数千次的功能(这是一种音频效果),并且我需要一个缓冲区来写入和读取音频数据。 在将float数组声明为普通数组或向量之间,在性能上有相当大的区别吗?

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

declaration:
  int size;  
  float *buffer;

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

~destroy()
{
  delete [] buffer;
}

动态分配内存的成本很小,以后的释放也一样,但是您已经说明了new使用,因此您的成本相当于带有足够初始大小或reserve调用的vector

一旦分配了这些操作,在任何优化的构建中都可以期望达到最快的速度,但是如果有任何需要的原因,则应该对自己进行概述。

与您的new代码无关,但仅供参考,由于寻址的存在,至少存在潜在的差异-全局或静态数组在编译时可能具有已知的虚拟地址,而基于堆栈的数组可能与堆栈指针,但在大多数体系结构上,相对于运行时确定的指针,索引和索引之间没有明显的性能差异。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM