Closed. This question needs details or clarity。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗?添加详细信息并通过editing this post阐明问题。
                        
                        5年前关闭。
                                                                                            
                
        
我知道从堆栈分配内存的速度更快,但是访问速度更快的变量时
例如:

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 ++创建游戏引擎,并且我经常进行绘图调用,这些调用很小,仅涉及矩阵的变换,旋转等,因此哪种分配对我的目的最有用

最佳答案

尽管该标准没有说明任何问题,但是在具有统一内存结构的计算机上应该没有区别。您可能会发现由于CPU缓存的影响,访问时间有所不同,因为在堆栈中分配的数组p中的数据将更接近(就地址而言)函数的其他局部变量的数据。 (除非优化程序选择将这些本地变量放置在寄存器中),但是总访问时间应该相同。

动态分配内存的最大冲击是mallocfree的调用。

09-08 08:41