我是一个固件开发人员,我通常在C或程序集中开发固件。然而,我在我们的嵌入式库中遇到了一个完全用C++实现的项目。现在我知道面向对象的语言可以在硬件级别上使用,但我想知道为什么它们在开发嵌入式系统时不那么流行。
发布于 2013-10-28 10:21:25
真正的原因:因为概念的复杂性。C和装配提供了一个简单的心理模型来跟踪系统中正在发生的事情。面向对象的程序需要一个更加复杂的模型,这使得我们很难对正在发生的事情进行推理。
与更开放的服务器和PC环境相比,嵌入式系统往往需要对系统中发生的事情进行非常严格的控制。这需要简单和透明的编程结构。C和程序集都提供了较高级别的可见性,可以在最低的硬件级别上了解系统中的实际情况。
面向对象的语言,特别是C++,抽象出了执行代码时系统中发生的许多细节,从而使系统内部工作的推理变得更加困难。
这里有一个例子来解释我的意思。考虑以下代码片段:
i++;在C程序中看到这一点,我们可以大致准确地了解它所做的事情,以及使用多少CPU周期、涉及多少寄存器等等的数量级。
那么,在C++程序中,同一行将做什么呢?那得看情况了。这取决于I是哪种类型,以及++操作符是如何重载的。懂得我的意思吗?
这些都不是说C++或面向对象是不好的。事实并非如此。如果你对系统中真正的细节感兴趣,这需要一个更为复杂的心理模型,正如许多嵌入式开发人员所认为的那样。
发布于 2013-10-28 08:45:37
从技术角度看,嵌入式系统资源有限。与纯过程语言相比,面向对象的语言倾向于创建更大的二进制文件,因此许多语言都会选择尽可能轻的二进制文件。例如,我在一家智能卡公司工作,我的团队负责处理极低成本的卡,RAM仅为1.5至1.75KB,EEPROM为96-136 KB。对于这种嵌入式环境,大多数面向对象的语言(尤其是诸如Java这样笨重的语言)都不能适应。我们甚至不使用任何标准C库,一切都是从零开始编写的。C++可能适合使用适当的编码技术和编译器选项,这些选项不会生成rtti、最小化vmt、只使用基于堆栈的对象等等,但这只是我的猜测。
发布于 2013-10-28 08:41:31
"OO语言“太宽泛了。有许多面向对象的语言具有截然不同的特点。“它可以用C++完成”并不意味着“它可以用任何面向对象语言完成”。为一个功能较弱的AVR编写了一个程序,祝你好运。该设备有2kB的RAM和32 2kB的Flash内存,Python解释器本身甚至不适合它们。
C++是一种同时具有高级和低级部件的语言。是面向对象的,但最终,您的好OO代码将被编译成原始机器代码,就像您直接用C或程序集编写它一样。其他一些被认为是“高级”的面向对象语言(或者只是高级语言)不能做同样的事情。这一切都是关于特定语言的实现,真的。
https://stackoverflow.com/questions/19630185
复制相似问题