函数参数只能通过栈传递吗?

2018-09-29 09:57:15 +08:00
 v2byy

在看《程序员的自我修养》一书中的调用惯例中,提到

函数参数的传递有多种方式,最常见的一种是通过栈传递。

其他的传递方式是什么呢?

4409 次点击
所在节点    程序员
28 条回复
v2byy
2018-09-29 14:41:59 +08:00
@lcdxiangzi 这里说的栈就是进程的虚拟地址空间里分配的一段空间吧
adminii
2018-09-29 15:07:35 +08:00
当然在堆栈(栈结构的内存),寄存器就那几个不够用。
polythene
2018-09-29 15:13:48 +08:00
如果是手动实现一个解释器的话(不管是高级语言还是汇编层面),一般会有两种模式,基于栈或者基于寄存器。基于栈的顾名思义就是每个函数都有独立的栈,每一次操作都是对这个栈内的数据进行运算。
tmy
2018-09-29 15:46:40 +08:00
linux 下 x64 是用寄存器,寄存器不够再用栈,细节可以把 c 代码编译成汇编,一看就知道了
Fxhcu7By
2018-09-29 17:18:12 +08:00
stdcall、cdecl、fastcall、thiscall 百度一下这些名词即可,学学汇编就懂了,可以理解函数的本质。
hx1997
2018-09-29 23:40:40 +08:00
@lcdxiangzi #18 这个栈是特指系统栈( system stack )或者叫调用栈( call stack )
Greenm
2018-10-02 22:35:15 +08:00
在 64 位的 linux 系统上,所有的系统调用(syscall)都是通过寄存器而不是通过堆栈传递的。
coffeegeorge
2019-04-19 15:39:12 +08:00
@YenvY 很有意思,多谢!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/493733

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX