运行时速度汇编与 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++使用高性能功能。
一般来说,汇编语言在执行时间方面总是比任何编译语言更有效,只是因为编译语言的性质。 相比之下,编译程序通常比汇编程序更不"脆弱",因为高级语言往往具有更多的错误预防和捕获功能以及数据管理(其中一些是从最终代码中优化出来的,如类型检查,其中一些仍然存在,如数组管理)。
我的阅读表明,就执行速度而言,Forth 是最接近汇编的,接近汇编速度的一半。 就结构相当传统的知名语言而言,C 是最有效和优化最好的语言之一,所以如果你对 Arduino 汇编程序不熟悉,C 可能是最好的选择 - 但它总是比汇编程序慢。
这通常适用于所有系统:在汇编中编写可以更快。这主要与高等语言具有开销这一事实有关,这使得它们更安全,更通用,但代价是速度。通常编译器可以使代码在编译过程中高效,但我认为Arduino目前没有这样的功能,或者它们不够先进。
相关文章:
- Linux的Cpp上的计时器
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 物理键盘上的触发器按键
- 如何加载(或映射)文件部分的最大大小,但适合在Windows上的RAM
- SSL上的`curl_easy_send`和`curl_asy_recv`:如何处理`CURLE_AGAIN`
- PowerPC ppc64le上的Gcc Woverloaded虚拟错误
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- 集合上的输出迭代器:assign和increment迭代器
- Cuda C++:设备上的Malloc类,并用来自主机的数据填充它
- 为什么我在leetcode上收到AddressSanitizer:地址0x602000000058上的堆缓冲区溢出错误
- 对于set上的循环-获取next元素迭代器
- 如何从棋盘上的箱号中找到行和列
- 为什么除非添加括号,否则构造函数上的模板替换会失败?
- if数组上的随机数
- 向量上的线性搜索
- 位阵列上的快速AND运算
- 无法将 GLFW 库与 Ubuntu 18.04 上的头文件链接
- 为什么一个向量上的多线程操作很慢
- 64位机器上的C++内存对齐
- 跟踪滚动条上的鼠标事件