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

RISC-V未被调用使用的参数寄存器是否仍属于调用者保存?

结论

是的,只要该函数是不调用其他任何函数的叶子函数,无论它的入参声明是什么样,哪怕是void(void)类型,都可以无需执行任何保存操作,直接自由使用全部8个a0~a7寄存器,这个规则和函数实际用到的参数寄存器数量完全无关。

原因说明

RISC-V ABI中「调用者保存寄存器」的定义核心是:该类寄存器的原值保护义务由发起函数调用的一方承担,被调用的函数天然不需要为这类寄存器的原值负责。
换句话说,上层调用者在调用你的函数之前,就默认a0~a7的值会被你修改,要是调用者后续还要用这些寄存器里的值,它自己会提前存好,不需要被调用的函数操心。

补充注意点

  • 只有当你的函数本身需要调用其他函数时,你才需要处理a0~a7的保存逻辑:这时候你变成了调用方,需要把你后续还要用到的aX寄存器里的值提前压栈保存,等被调用函数返回之后再恢复,避免你自己要用的值被其他函数改掉。
  • 注意和被调用者保存寄存器(s0~s11)做区分:如果你要用到s系列寄存器,不管你是不是叶子函数,都必须先备份寄存器原值,函数返回前再恢复,因为上层调用者默认这类寄存器的值在调用前后不会发生变化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 22:36:03