使用C ++而不是C时会有很多额外的开销吗?

时间:2014-05-15 04:44:23

标签: c++ c microcontroller

我一直在使用C编程微控制器,但就像C ++带来的面向对象性质的直觉一样。

一般使用C ++有哪些主要缺点?除了类实例化和删除,调用相关的构造函数和析构函数之外,与使用C的等效实现相比,是否存在大量开销?

具体来说,我关注以下几个方面:

  • 额外内存使用量(RAM)
  • 需要额外的指令(以及相应的CPU时间)
  • 存储C ++程序所需的额外内存(即编译结果)

2 个答案:

答案 0 :(得分:2)

用C ++编程本身并不会给你一个更慢/更大的/<在这里插入最糟糕的噩梦>程序。但是,这是偏向C到C ++用于微控制器的一些原因:

  • 编写C ++编译器要比编写C编译器困难得多。因此,找不到小型处理器的C ++编译器是不可能的,但总能找到C编译器。这可能会或可能不会打扰你。即使它现在不打扰你,如果你想要移植你的代码,将来也可能会这样。
  • C ++可以做你背后的事情。向量比数组更容易处理,因为很多工作都是为你完成的。但这意味着该库正在为您分配内存,并且当想要时它就会这样做。如果内存非常宝贵,那么您可能希望拥有完全控制权。此外,如果您的用例中存在实时元素,那么您可能希望预先分配所有内存,以便每个调用都是可预测的(如果您达到需要的范围,插入到向量可能需要很长时间增长...这可能意味着将矢量复制到堆上的新位置。
  • C ++具有占用更多内存且易于使用的功能。如果将函数设置为虚拟,则编译器可能需要具有虚函数表(更多内存和稍慢的函数调用)。这可能是你想要的,但这些东西在C ++中比在C中更容易引入。

总的来说,C ++会让你引入比C更大更慢的代码。但是如果你想要那些功能然后在C中做这个很痛苦(想想函数指针而不是虚函数调用......它们实际上是同一个东西)。并且C版本最终将花费相同的时间和资源,因此使用C无法节省。

答案 1 :(得分:0)

动态调度(即标记为virtual的方法)的成本略高于非虚拟方法(但可以忽略不计)(但好消息是,您不必将方法标记为{{1除非你打算覆盖它,并且当你使用它时,它可能会比你在C中用手工制作的任何东西更快地执行相同的操作)并且异常处理可能会很慢(尽管你不会这样做)。需要在代码中使用异常)。除此之外,没有区别,除了C ++将大大简化代码而不是等效的C代码。