首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么面向对象的语言在嵌入式世界中不流行?

为什么面向对象的语言在嵌入式世界中不流行?
EN

Stack Overflow用户
提问于 2013-10-28 08:35:27
回答 5查看 1.1K关注 1票数 3

我是一个固件开发人员,我通常在C或程序集中开发固件。然而,我在我们的嵌入式库中遇到了一个完全用C++实现的项目。现在我知道面向对象的语言可以在硬件级别上使用,但我想知道为什么它们在开发嵌入式系统时不那么流行。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-10-28 10:21:25

真正的原因:因为概念的复杂性。C和装配提供了一个简单的心理模型来跟踪系统中正在发生的事情。面向对象的程序需要一个更加复杂的模型,这使得我们很难对正在发生的事情进行推理。

与更开放的服务器和PC环境相比,嵌入式系统往往需要对系统中发生的事情进行非常严格的控制。这需要简单和透明的编程结构。C和程序集都提供了较高级别的可见性,可以在最低的硬件级别上了解系统中的实际情况。

面向对象的语言,特别是C++,抽象出了执行代码时系统中发生的许多细节,从而使系统内部工作的推理变得更加困难。

这里有一个例子来解释我的意思。考虑以下代码片段:

代码语言:javascript
复制
i++;

在C程序中看到这一点,我们可以大致准确地了解它所做的事情,以及使用多少CPU周期、涉及多少寄存器等等的数量级。

那么,在C++程序中,同一行将做什么呢?那得看情况了。这取决于I是哪种类型,以及++操作符是如何重载的。懂得我的意思吗?

这些都不是说C++或面向对象是不好的。事实并非如此。如果你对系统中真正的细节感兴趣,这需要一个更为复杂的心理模型,正如许多嵌入式开发人员所认为的那样。

票数 6
EN

Stack Overflow用户

发布于 2013-10-28 08:45:37

从技术角度看,嵌入式系统资源有限。与纯过程语言相比,面向对象的语言倾向于创建更大的二进制文件,因此许多语言都会选择尽可能轻的二进制文件。例如,我在一家智能卡公司工作,我的团队负责处理极低成本的卡,RAM仅为1.5至1.75KB,EEPROM为96-136 KB。对于这种嵌入式环境,大多数面向对象的语言(尤其是诸如Java这样笨重的语言)都不能适应。我们甚至不使用任何标准C库,一切都是从零开始编写的。C++可能适合使用适当的编码技术和编译器选项,这些选项不会生成rtti、最小化vmt、只使用基于堆栈的对象等等,但这只是我的猜测。

票数 3
EN

Stack Overflow用户

发布于 2013-10-28 08:41:31

"OO语言“太宽泛了。有许多面向对象的语言具有截然不同的特点。“它可以用C++完成”并不意味着“它可以用任何面向对象语言完成”。为一个功能较弱的AVR编写了一个程序,祝你好运。该设备有2kB的RAM和32 2kB的Flash内存,Python解释器本身甚至不适合它们。

C++是一种同时具有高级低级部件的语言。是面向对象的,但最终,您的好OO代码将被编译成原始机器代码,就像您直接用C或程序集编写它一样。其他一些被认为是“高级”的面向对象语言(或者只是高级语言)不能做同样的事情。这一切都是关于特定语言的实现,真的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19630185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档