You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

函数调用时传入的参数是否存储在调用者内存?传参效率对比

函数调用参数与临时返回值的内存存储及效率问题

1. 调用函数时,用于调用的参数是否存储在调用者函数的内存中?

这取决于编程语言、编译器实现以及调用约定,核心逻辑如下:

  • 对于值传递的参数:调用者会生成参数的副本,这个副本通常被放到调用栈的指定区域(比如调用者负责将参数压入栈,该区域属于调用栈的一部分,可视为调用者栈帧的延伸),或者部分小型参数会直接存入寄存器(寄存器不属于内存范畴)。
  • 对于引用/指针传递的参数:传递的是目标数据的内存地址,这个地址本身的存储逻辑和值传递一致,而实际数据仍存储在原位置(可能是调用者的内存,也可能是其他内存区域)。
  • 简单总结:参数的载体(值副本或地址)由调用者安排到约定的存储位置,这些位置可能属于调用者的栈空间,也可能是寄存器。

2. 嵌套调用场景中,funcB的返回值存储及效率问题

针对代码示例:

main() {
    funcA(funcB(params));
}
  • funcB的求值结果不会存储在main的局部变量内存中:现代编译器会将funcB的返回值直接传递给funcA的参数位置(比如存入寄存器,或栈上的临时传递区域),不会额外分配main的局部变量空间来存储这个临时结果。只有当返回值是大型结构体等特殊情况时,可能会用栈上的临时缓冲区,但该缓冲区不属于main的局部变量空间。
  • 将结果存入变量再传给funcA不会更高效:现代编译器具备“临时变量消除”优化能力,两种写法最终生成的机器码几乎完全一致。甚至嵌套调用的写法更便于编译器做流程优化,不会产生额外开销。

内容的提问来源于stack exchange,提问作者Mayank

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 21:12:37