我有一个每秒调用数千次的函数(这是一个音频效果),我需要一个缓冲区来写入和读取音频数据。将 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/