Arduino 上运行时组装速度与 C/C++ 的差异

Difference in runtime speed assembly vs. C/C++ on an Arduino

我听说用汇编写一个Arduino应用程序可以使程序实时,而用C或C++编写应用程序会比这慢。

如果这是真的,则意味着对于不同类型的 Arduino 应用程序(高速应用程序与非速度关键应用程序)应使用不同的编程语言。

我真的很想知道当 C/C++ 代码被有效编译时,这个说法是否正确。

这是一个关于所有编程的非常普遍的问题,它根本不是特定于 Arduino 的。

它可能更频繁地弹出的原因是基本 Arduino 的性能有点有限,而且它是一个嵌入式平台,低级操作非常普遍。

有时,通过更直接地使用处理器的功能,您可以在汇编程序中比在高级语言(例如典型的 C++)中更有效地表达此类操作。

Arduino 库包含汇编代码是很常见的,这样可以更轻松地从 C++ 使用高性能功能。

一般来说,就执行时间而言,汇编语言总是比任何编译语言更高效,这只是因为编译语言的性质。相比之下,编译后的程序通常会比汇编程序少 "fragile",因为高级语言往往具有更多的错误预防和捕获功能以及数据管理(其中一些在最终代码中进行了优化) ,比如类型检查,其中一些仍然存在,比如数组管理)。

我的阅读表明,就执行速度而言,Forth 是最接近汇编的,接近汇编程序速度的一半。就在结构上相当传统的相当知名的语言而言,C 是最高效和最优化的语言之一,因此如果您对 Arduino 汇编器不满意,C 可能是最佳选择——但它永远是比汇编程序慢。

这通常适用于所有系统:用 Assembly 编写可以更快。这主要是因为高级语言有开销,这使它们更安全、更通用,但以牺牲一些速度为代价。通常编译器可以在编译过程中使代码高效,但我想Arduino暂时没有这样的功能,或者它们不够先进。