C++ 哪个访问堆栈或堆更快?
我知道从堆栈分配内存更快,但是当访问一个变量时速度更快 例如:C++ 哪个访问堆栈或堆更快?,c++,performance,stack,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; } void fn1() { int*p=新的int[50]; 对于(int i=0;i),您将通过调用新< /
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;
}
void fn1()
{
int*p=新的int[50];
对于(int i=0;i),您将通过调用<代码>新< /代码>来分配数组命中,但之后它们将具有相同的性能特性。 如果考虑分配,
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
中的数据(在地址方面)将更接近函数的其他局部变量的数据(除非优化器选择将这些局部变量放入寄存器中),但总体访问时间应该相同
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;
}
动态分配内存的最大影响是调用malloc
和free
你指的是堆栈还是堆?为什么不测试它?我对这两种方法都没有把握,特别是在机器上,但通常new
比只保留spac要慢得多问题是,在用数据填充内存后,您将使用内存做什么?如果要返回数据,堆分配的数据将不需要复制,而堆栈数据将需要复制。可能会重复测量时间;)?
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;
}