通过指针而不是值传递值会减慢程序吗?

时间:2015-01-01 19:06:32

标签: c

一位经验丰富的程序员声称,通过指针传递值会使程序或至少编译器变慢。这是真的吗?

https://www.youtube.com/watch?feature=player_embedded&v=w7ay7QXmo_o#t=288

1 个答案:

答案 0 :(得分:3)

我观看了视频的特定部分。

情况:
一个人有一个小的第三方结构并按值传递它。

为什么好:
1.小结构不会占用太多空间来减慢通过堆栈的参数,并且您可以(理论上)实现更好的内存/缓存使用,因为您不使用指针访问内存。编译器/优化器可能不会像你提到的那样为你做这件事 2.它是第三方结构,在程序开发过程中,它的大小不太可能发生变化 3.当const指针与非const指针vs值,...时,函数签名对于结构的访问/所有权的说法有所不同,...

有什么问题:
这家伙并没有真正深入解释发生了什么以及他为什么要进行这种优化。为什么要这样做,然后谈论它呢? 2.我不知道这会如何以任何方式减慢编译器/优化器的速度,但我不是这方面的专家。

为什么这不应该是一般编程规则:
1.如果您没有使用第三方结构,很可能您的结构将在开发过程中发生变化,并且您将拥有低效的代码或很多重写。或者编译器可能会为你完成这项工作,然后就没有必要从头开始 2.在创建新代码的开发过程中,只有你应该考虑性能的是核心算法和数据结构的效率。如果你写了一个糟糕的排序算法,你不会通过一个值传递一个结构来帮助它。正如评论中所提到的,这取决于后果。我怀疑任何人都可以真正预见到一些边缘(性能方面)的东西,如通过指针,通过指针,当涉及小结构时,会产生重大的性能影响。做出这样的决定应该基于要么很好地了解后果(理想情况下,先前已经解决了这个问题),要么有一个分析器报告,说明存在性能问题。

考虑到这一点,然后更新游戏(?)窗口的功能,即每秒运行60次或甚至120次,将被假定为程序的核心,并且应尽可能地进行优化。看起来这个人正在研究它并发现他通过按值传递结构而不是通过指针传递得到更好的结果。