![](/img/trans.png)
[英]Why does a for loop in c++ access a memory location in non-initialized compared to the behavior of a normal cout?
[英]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.