具有函数签名,例如:
pub fn hash(input: &[u8]) -> [u8; 32]
如何将这32个字节传递给调用函数?(在优化之前,可能会将某些部分放在寄存器中.)
可能的情况包括:
- 在堆栈上,调用函数必须将它们复制到它自己的堆栈框架中预先分配的空间中.
- 在堆上,并在调用函数中插入生成的
free()
. - 一些按线程静态分配的缓冲区.
只是好奇,我不需要这些信息.答案可能因架构而异.
具有函数签名,例如:
pub fn hash(input: &[u8]) -> [u8; 32]
如何将这32个字节传递给调用函数?(在优化之前,可能会将某些部分放在寄存器中.)
可能的情况包括:
free()
.只是好奇,我不需要这些信息.答案可能因架构而异.
既不涉及副本,也不涉及堆分配.
调用方函数为其堆栈上的值分配空间.被调用者接受一个额外的隐藏参数,即返回值的地址.它在那里写下了值.调用方将其堆栈上分配的空间的地址作为隐藏参数的值传递.
当然,这一切都不能保证.这就是现在碰巧发生的事情.