【发布时间】:2017-03-04 07:08:19
【问题描述】:
让我们考虑一个对象foo(可能是int、double、自定义struct、class,等等)。我的理解是,通过引用函数来传递 foo(或仅传递指向 foo 的指针)会导致更高的性能,因为我们避免制作本地副本(如果 foo 很大,这可能会很昂贵)。
但是,从答案here 看来,实际上可以预期 64 位系统上的指针大小为 8 字节,无论指向什么。在我的系统上,float 是 4 个字节。这是否意味着如果foo 是float 类型,那么仅通过值传递foo 而不是提供指向它的指针会更有效(假设没有其他约束会使在函数内部使用一个比另一个更有效)?
【问题讨论】:
-
你应该测量它。被引用/复制的东西的大小并不是唯一起作用的东西。
-
简而言之:通过值传递本地类型(int、float、double)几乎总是比通过引用更有效。不仅因为在大多数情况下,指针比原生数据类型更大或一样大,还因为优化器优化引用参数比优化值参数要困难得多。
-
这是无法回答的。 c++ 标准没有说明这个成本。不同的编译器有不同的优化。其中任何一个都可能是免费的。
标签: c++ pointers pass-by-reference pass-by-value pass-by-pointer