在C ++中使用指针可以减少运行时间吗?

时间:2012-11-10 06:17:15

标签: c++ pointers performance

我有一个简单的问题,即只使用指针而不是正常变量是时间还是内存增加程序的效率? 对于一个实例,如果我使用以下程序来交换两个整数。

#include<iostream>
#include<conio.h>
#include<new>
using namespace std;
int main()
{
   int *a=new int;
   int *b=new int;
   int *c=new int;
   cin>>(*a)>>(*b);
   *c=*a;*a=*b;*b=*c;
   cout<<"swapping";
   cout<<*a<<*b;
getch();
}

4 个答案:

答案 0 :(得分:9)

使用指向变量而不是变量的指针不太可能提高性能。尽可能以最清晰的方式编写代码,让编译器为您优化代码。如果有的话,使用指针可能会减慢速度,因为它会使编译器分析更加困难。

对于大型对象,值得保留指向对象的指针而不是复制这些对象。也许这是你错误推断的真理核心。

答案 1 :(得分:4)

在上面给出的例子中,它在时间和记忆方面效率都较低。

  • 动态分配比局部变量花费更多时间(有函数调用和工作要完成,局部变量是通过从堆栈指针中减去来创建的,通常只对所有局部变量进行一次操作)。
  • 动态分配比本地变量花费更多内存(内存管理器中有支持数据结构)。

当用于防止复制大型结构时,指针可以使程序更有效。 int不属于此类别。

答案 2 :(得分:3)

我唯一可以想到的可能是使用比使用局部变量更慢的指针是生成的程序集可能涉及更复杂的内存寻址,从而导致更大的机器操作码,这反过来将永远 - 所以稍微多一点时间来执行。

虽然您不应该担心它,但时间差异可以忽略不计。

您应该考虑allocation on the stack is much faster than allocation on the heap。换句话说:

int* a = new int;

慢于:

int a;

但仅仅因为分配new int,而不是因为您使用的是指针。

答案 3 :(得分:0)

此代码在您编写它的级别几乎 nothing 。 如果您在指令级别上逐步执行此操作,您会看到每次拨打new都会执行100条指令,而cout <<来电甚至会更多。

这就是你所测量的。