我正在开发一个嵌入式Linux(ARM)应用程序,每秒将执行500次,因此速度非常重要。我更喜欢使用C ++,但我担心即使避免使用虚函数等高级特性,它仍然比C慢。
是否有理由使用C,还是使用C ++编写同样可以呢?
我正在开发一个嵌入式Linux(ARM)应用程序,每秒将执行500次,因此速度非常重要。我更喜欢使用C ++,但我担心即使避免使用虚函数等高级特性,它仍然比C慢。
是否有理由使用C,还是使用C ++编写同样可以呢?
C++通常不会比C语言在运行时产生额外的开销,除了一些像RTTI这样的特殊情况。
除非是一些奇怪的情况,否则编译器应该能够在编译时确定要调用哪个虚函数,因此不会增加任何额外的开销。
编辑:好的,由于存在各种编译器、CPU、运行库和操作系统,C++的某些特性可能会导致代码变慢,而其他特性则可能会导致代码变快。
但我们是否都同意,现在 C++ 不再自动排除嵌入式使用?
operator<<ostream&, float)
但不能从printf()
实现中消除case 'f':
。 - MSalters只要您的嵌入式系统有足够的RAM和flash,C++就可以胜任。 C++运行时库(libstdc ++)很大,并且即使您仅使用C ++,也会与C标准库(libc)一起使用。
libstdc ++
变小。 uClibc ++
的存在是有原因的;可惜它相当不完整。 - R.. GitHub STOP HELPING ICE你可以使用C++,但要非常小心。
对于大小,要密切关注链接器映射文件。你会发现它包含了很多不必要的东西,只是因为一个看似无害的声明。
对于速度,经常进行性能分析或随机暂停。很容易做出比你实际需要更多的new
和delete
,特别是在容器类中,还要特别小心像迭代器这样的东西。通常它们会给你提供一些你没有要求的帮助。
你可以通过汇编语言级别逐步执行代码,以确保它只执行你实际需要的操作,这与C代码应该大致相同。
编写高效的代码,无论是嵌入式还是其他领域,真正的关键在于程序员充分理解自己的决策所带来的影响。
在某种程度上,C++ 提供了更多机会,使得一些昂贵的功能看起来毫不费力。与 C++ 功能相当的功能通常需要更多的代码,这可能会导致对其潜在开销的更多思考。但这绝不是绝对的 - C(及其库)也有欺骗性的开销风险。
最终,没有什么能够替代理解每行代码所要求的内容。
我正在使用ARM9开发板进行硬件控制,并在500 MHz的板子上同时使用C和C++应用程序。您可以选择语言以及如何实现逻辑来实现功能。因为我在控制硬件的一整天中没有发现任何问题运行我的应用程序。
编写程序时,请仔细选择变量,检查它是否有多余的指令/循环,初始化。还要在编译时使用Gcc优化标志。
我在500 MHz ARM 9板上运行我的Qt应用程序和C程序时没有遇到任何问题。