目前正在使用 ARM 嵌入式系统,想知道一个函数/方法最多应该有多少个参数,这样代码才能同时保持可读性和效率。
目前我正在为一个函数使用 6 个参数。但是 ARM 文档只说了 4 个参数以获得更好的代码。如果我有超过 4 个参数怎么办,它会影响系统的性能吗?
最佳答案
ARM EABI其中定义了 C/C++ 代码的调用约定要求前四个参数在通用寄存器 R0 到 R3 中传递。
其他参数在调用堆栈上传递,因此涉及 RAM 访问以加载和检索它们。除了 RAM 访问通常比寄存器访问慢之外,与 RAM 之间的传输在任何情况下都需要更多的指令。
这当然适用于长度为 32 位的参数。复制传递的 double 浮点类型和聚合类型(结构)不能在单个寄存器中传递。
最后大概是学术性的;如果一个函数需要参数,它就需要它们!传递大量数据的替代方法具有类似的开销,使它们变得很少或没有更好。例如,您可以将单个指针或引用传递给包含数据的结构或对象,但该数据仍在 RAM 中,访问开销仍然存在。
关于c++ - 为什么 ARM 文档建议只有 4 个函数参数?有更多的特定性能成本吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26515261/