为什么ARM文档建议只有4个函数参数?有更多的特定性能成本吗?

Dhe*_*mar 1 c c++ embedded arm

目前正在使用ARM嵌入式系统,并且想知道max a function/method应该有多少个参数,以便代码应该同时保持可读性和高效性.

目前我正在使用一个函数的6个参数.但是,ARM文档仅为更好的代码说明了4个参数.如果我有超过4个参数,它会影响系统的性能吗?

Cli*_*ord 11

ARM EABI定义除其他事项外的C/C++代码调用约定要求的前四个参数被传递在通用寄存器R0至R3.

其他参数在调用堆栈上传递,因此涉及RAM访问以加载和检索它们.除了RAM访问通常比寄存器访问更慢之外,RAM的传输在任何情况下都需要更多指令.

这当然适用于长度为32位的参数.双精度浮点类型和通过副本传递的聚合类型(结构)不能在单个寄存器中传递.

最后它可能是学术性的; 如果一个函数需要参数,它需要它们!传递大量数据的替代方法具有类似的开销,使得它们很少或没有更好.例如,您可以将单个指针或引用传递给包含数据的结构或对象,但该数据仍在RAM中,并且仍然存在访问开销.