我试图了解有关在C中按值传递的历史原因的更多信息。有一篇Stack Overflow帖子涉及与C ++有关的该主题。但是,我对C感兴趣。我回想起做出此决定时,可能会选择做我们现在所说的“通过引用传递”。但是,这不是做出的选择。是否存在优化,多线程等问题?
我尝试使用Google进行搜索,但没有成功。通过值传递为变量在引擎盖下未更改提供了一些保证。这是唯一原因吗?我以为当时“复制胖对象”的概念已不是什么大问题,而按值传递会产生少量开销。因此,这可能被认为是正确的选择。除了这个决定,还有更多的决定吗?
Eri*_*hil 14
用Kernighan和Ritchie在1978年的C编程语言中的第1.8节“参数—按值调用”,第24页:
价值召唤是一种资产,但不是负债。它通常会导致程序更紧凑,外部变量更少,因为在调用的例程中可以将参数视为方便地初始化的局部变量。例如,…
…如有必要,可以安排一个函数在调用例程中修改变量。调用者必须提供要设置的变量的地址(技术上是指向变量的指针),…
每次使用参数时,按值传递通常比按引用传递和取消引用指针要快。由于结构不是早期C语言的一部分,后来又需要作为指针传递,因此这不是一个大问题。
许多旧的编译器无法优化取消引用,或者无法优化取消引用,并且每次要使用参数时都对引用进行引用会非常缓慢。
老式计算机需要微优化的代码才能更快地运行,因为处理器本身并不很快。
它使程序员可以自由选择是否要使用指针或值来访问数据。
所有这些加在一起可能等于C为什么使用值传递。