我知道从堆栈中分配内存更快,但是在访问更快的变量时 例如:
void fn1()
{
int *p=new int[50];
for(int i=0;i<50;i++)
p+i=i*i;
}
void fn2()
{
int p[50];
for(int i=0;i<50;i++)
p[i]=i*i;
}
上述哪个功能会更快执行?
我问它是因为我正在用c ++创建一个游戏引擎,并且我经常进行绘制调用,这些调用很小,只涉及矩阵的转换,旋转等,因此哪个分配对我的目的最有用
答案 0 :(得分:6)
虽然标准没有说明任何内容,但在具有统一内存结构的计算机上应该没有区别。由于CPU中缓存的影响,您可能会看到访问时间的一些差异,因为堆栈中分配的数组p
中的数据将更接近(就地址而言)其他局部变量的数据。你的函数(除非优化器选择将这些本地文件放在寄存器中),但整体访问时间应该相同。
对于动态分配的内存,你要采取的最大打击是malloc
和free
的调用。
答案 1 :(得分:1)
已经有一段时间了,因为我已经深入研究了C ...索引到一个数组应该是一个快速的操作。作为猜测,我会说他们将会是一样的。在第一个函数中,您正在递增指针...在第二个函数中,您将索引到数组中,这与递增指针以到达相应数组元素的内存位置几乎相同。
答案 2 :(得分:0)
您可以通过调用new
来分配数组,但之后它们将具有相同的性能特征。
答案 3 :(得分:0)
如果考虑分配,
第二个函数的执行速度比第一个快。当你在堆栈上分配内存时,嵌入指令使得它将移动堆栈指针,并且几乎它将成为大多数架构上的单个指令。