通过引用或指针访问之间的性能差异

时间:2015-06-05 22:49:53

标签: c++ performance pointers reference

此代码之间是否存在性能差异:

struct foo   example;

my_function(&example);

void         my_function(struct foo *example);

这段代码:

struct foo   example;

my_function(example);

void         my_function(struct foo &example);

我认为两种方法都不同,但它们之间是否有任何性能差异?

1 个答案:

答案 0 :(得分:1)

您发布的代码是C ++,而不是C,因为C缺少引用。

也就是说,C ++中的引用类型与指针几乎没有区别,只是在初始化之后它不能指向不同的指针(不能存储不同的地址)。它实际上是一个指针语义指针,用于从指针隐藏起来。

通过引用,您可以在引用始终指向有效的情况下获得一些额外的安全性。例如,您无法为引用分配null。因此,从C ++的角度来看,许多人经常鼓励尽可能使用引用,因为它具有更多约束并缩小选项范围可能意味着更少的方法来滥用它。

从性能的角度来看,在一个非常理论的领域,优化编译器可能会使用这样一个事实:一旦分配给它的好处,引用就不能改变地址。在实践中,大多数优化编译器都不是那么愚蠢,以至于需要程序员的帮助,许多人已经证明优化编译器会发出相同的汇编,无论你是使用引用还是指针。

所以对你的问题的实际答案通常是否定的,没有性能差异。

相关问题