Rust如何返回大类型(优化前)?

vuktfyat  于 2023-08-05  发布在  其他
关注(0)|答案(1)|浏览(106)

使用函数签名,例如:

pub fn hash(input: &[u8]) -> [u8; 32]

字符串
这32个字节是如何传递给调用函数的呢?(在优化之前,这可能会将某些部分放入寄存器中。)
可能性包括:

  • 调用函数必须将它们复制到自己的堆栈帧中的预分配空间中。
  • 在堆上,将生成的free()插入调用函数。
  • 一些每个线程静态分配的缓冲区。

只是好奇,我不需要这些信息。答案可能因体系结构而异。

6za6bjd0

6za6bjd01#

这里既不涉及拷贝也不涉及堆分配。
调用方函数在其堆栈上为该值分配空间。被调用方接受一个附加的隐藏参数,即返回值的地址。它把值写在那里。调用方将其堆栈上已分配空间的地址作为隐藏参数的值传递。
当然,这些都不能保证。这就是它现在的工作方式。

相关问题