我有一个被称为每秒数千次的功能(这是一个音频效果),我需要一个缓冲区来写入和读取音频数据。将浮点数组声明为普通数组或向量?
之间在性能上是否存在相当大的差异?一旦声明,我的数组在音频循环期间没有调整大小,但在初始化阶段我不知道确切的长度,因为它取决于音频采样率。因此,例如,如果我需要2秒音频缓冲器,采样率为44100 Hz,我通常会这样做:
declaration:
int size;
float *buffer;
void init (int sr)
{
size = sr * 2;
buffer = new float[size]();
}
~destroy()
{
delete [] buffer;
}
答案 0 :(得分:1)
动态分配内存的成本很低,后期的重新分配也是如此,但您已经说明了new
的使用情况,因此您的成本相当于vector
的初始大小或{{1}以各种方式打电话。
一旦分配,任何优化的构建中的操作都可以被视为快速,但是如果您有任何理由需要关注,您应该自我描述。
它与您的reserve
代码无关,但是由于寻址至少存在潜在的差异 - 全局或静态数组可能在编译时知道虚拟地址,并且基于堆栈的数组可能处于堆栈指针的已知偏移量,但在大多数体系结构中,相对于运行时确定的指针,它们与索引之间没有明显的性能差异。