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

标签 c++ c embedded arm

目前正在使用 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/

相关文章:

c++ - 表达式 "void()"及其在三元条件下的有效性

c++ - 零初始化的 std::atomic<T*> 是否保证等同于用 nullptr 初始化的?

c++ - 使用 PoDoFo 库从 PDF 运算符中的数组 TJ 中提取文本

c++ - 在 Visual Studio 2019 MSVC 中编译时出现编译错误 C2048,但在 clang++ 中可以正常工作吗?

c - 如何解决 MISRA C :2012 error regarding to memcpy function?

c# - PHP 作为嵌入式脚本语言

c++ - 接受方法参数中的任何类模板

c++ - 如何将 OpenPrinter 用于网络打印机?

c++ - 中断来自并行线程的阻塞调用

bluetooth - 嵌入式系统的成熟蓝牙堆栈?