use*_*301 0 c++ performance stack
我知道从堆栈中分配内存更快,但是当访问更快的变量时:
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;
}
Run Code Online (Sandbox Code Playgroud)
上述哪些功能会更快执行?
我问它是因为我正在用c ++创建一个游戏引擎,并且我经常进行绘制调用,这些调用很小,只涉及矩阵的转换,旋转等,因此哪个分配对我的目的最有用
虽然标准没有说明任何内容,但在具有统一内存结构的计算机上应该没有区别.由于CPU中缓存的影响,您可能会看到访问时间的一些差异,因为p堆栈中分配的数组中的数据将更接近(就地址而言)函数的其他局部变量的数据(除非优化器选择将这些本地放置在寄存器中)但总体访问时间应该相同.
动态分配的内存最重要的是malloc和的调用free.