2011-08-24 47 views
0

使用const int &var形式参数代替const int var有什么好处吗?使用(const int&var)形式参数代替(const int var)会有什么收获吗?

我知道大结构中的优势,但对于POD,指针的大小通常与实际数据大小相同。所以我想答案是“没有优势”。但我认为也许通过价值语义复制一次到堆栈,再次复制到堆栈的一个区域以便于参考(比如说一个寄存器)。或者可能不是。事实上,它可以INFACT更好通过值传递,

http://www.learncpp.com/cpp-tutorial/73-passing-arguments-by-reference/

由于引用通常被C++实现使用指针,和解除引用一个指针是不是直接访问它比较慢,访问由参考传递的值是比访问按值传递的值慢。

但是,这回到了我所说的关于复制堆栈的内容。我只是偏执狂吧?这种行为是为编译器担心而不是我。

我可以单步组装我知道,但是,好吧,谷歌搜索速度更快,它变成了空白。

+1

最后,它可能是微不足道的值得优化。 – Dawson

+0

@Toolbox,我不知道,手机上的复杂应用程序似乎很受欢迎。 – John

+2

这种复杂性正是我认为有几十个其他优化,你会得到更多的性能提高。 – Dawson

回答

3

考虑一下:

非基准

  • 分配堆栈
  • 复制值到堆栈
  • 呼叫像往常一样
  • 使用功能上的一个int变量在堆栈上

参考

  • 分配一个指针堆栈上
  • INT的复制地址堆栈
  • 呼叫像通常的
  • 解除引用堆栈(在可变的功能在同一个可能多次功能)
  • 使用变量

使用参考版本稍慢。一般来说,让编译器担心它。如果它是一个只读值,只需给它一个普通的旧int。如果您需要修改调用者的值,请使用引用或指针。

当然,这只适用于像int这样的小数据类型。如果你正在讨论像结构或类似的东西,那么使用引用可能会更快。

+2

指针通常不会比32位机器AFAIK上的int大。 –

+0

我不认为大多数32位处理器上的指针大于整数。 http://stackoverflow.com/questions/589575/size-of-int-long-etc/589685#589685 –

+0

@Seth Carnegie确实没有太大的区别(善良,也许4字节在堆栈上浪费!虽然操作速度不会太慢),但最多只有一样快,最坏的情况是慢一点。那为什么呢? – Voo

1

当你传递一个引用时,你复制引用的值,都是一样的。当你使用它时,你会间接浪费几个周期,但除此之外没有性能差异。

当然,如果抛弃常量,或者如果在其他线程上更改引用值,程序行为可能会有所不同。

+0

只是做基本的算术,只是注意到他们仍然使用普通旧(int var)作为fp。 – John

相关问题