在看《程序员的自我修养》一书中的调用惯例中,提到
函数参数的传递有多种方式,最常见的一种是通过栈传递。
其他的传递方式是什么呢?
在看《程序员的自我修养》一书中的调用惯例中,提到
函数参数的传递有多种方式,最常见的一种是通过栈传递。
其他的传递方式是什么呢?
|
seaswalkerSep 29, 2018 via iPhone
1
寄存器
|
|
bestoSep 29, 2018
2
全局变量(手动斜眼)
|
|
3
|
|
shenchSep 29, 2018
4
寄存器(手动斜眼)
|
|
kljsandjbSep 29, 2018 via iPhone
5
寄存器不够用的话用栈?
|
|
pythoneeSep 29, 2018
6
寄存器和栈有什么区别呢
|
|
reusSep 29, 2018
7
你喜欢的话,通过 U 盘传递都可以
|
|
innoinkSep 29, 2018
8
还可以通过 tcp 传:)
|
|
bestoSep 29, 2018
9
@pythonee 首先要了解栈传递是什么原理, 函数调用的时候, 参数其实是依次压栈进去的, 而通过寄存器传递直接访问寄存器就行了(当然, 一般为了保护环境 函数前后应该有把使用寄存器压入栈和出栈的操作)
|
|
hanangelloveSep 29, 2018
11
堆栈在内存上,寄存器在 CPU 里面
|
|
hx1997Sep 29, 2018 via Android
12
x86 一般是栈传递,x86-64 默认是寄存器,参数太多寄存器不够用时用栈辅助。
|
|
chiuSep 29, 2018 via Android
13
共享内存
|
|
fixmestanSep 29, 2018
14
|
|
xuecatSep 29, 2018
15
你是想问:__stdcall、__cdecl 和__fastcall 这种传参约定吗?
|
|
co3siteSep 29, 2018 via Android
16
cdcall、stdcall 是栈传递,fastcall 的话会用先用两寄存器,超过三参数还是给 push 到栈里面
定义全局变量参数结构,用指针传进去 |
|
icylogicSep 29, 2018 via iPhone
17
: calling convention
|
|
18
有点晕呢,栈和寄存器是同一个维度的东西吗?寄存器是 CPU 封装的硬件,栈是软件开发使用的数据结构。与寄存器对应的应该是内存或者硬盘吧?为什么大家都说寄存器和栈呢?
|
|
19
寄存器就是芯片内的 flip flop 栈是内存 sram 或者 dram 当然有可能高级语言有其他意思?
|
|
zhzerSep 29, 2018 via Android
20
local,各种 local
|
|
21
@lcdxiangzi 这里说的栈就是进程的虚拟地址空间里分配的一段空间吧
|
|
adminiiSep 29, 2018
22
当然在堆栈(栈结构的内存),寄存器就那几个不够用。
|
|
polytheneSep 29, 2018
23
如果是手动实现一个解释器的话(不管是高级语言还是汇编层面),一般会有两种模式,基于栈或者基于寄存器。基于栈的顾名思义就是每个函数都有独立的栈,每一次操作都是对这个栈内的数据进行运算。
|
|
tmySep 29, 2018
24
linux 下 x64 是用寄存器,寄存器不够再用栈,细节可以把 c 代码编译成汇编,一看就知道了
|
|
Fxhcu7BySep 29, 2018
25
stdcall、cdecl、fastcall、thiscall 百度一下这些名词即可,学学汇编就懂了,可以理解函数的本质。
|
|
hx1997Sep 29, 2018
26
@lcdxiangzi #18 这个栈是特指系统栈( system stack )或者叫调用栈( call stack )
|
|
GreenmOct 2, 2018 via iPhone
27
在 64 位的 linux 系统上,所有的系统调用(syscall)都是通过寄存器而不是通过堆栈传递的。
|
|
coffeegeorgeApr 19, 2019
28
@YenvY 很有意思,多谢!
|