C ++程序真的比类似的C程序慢吗?

时间:2010-08-15 12:12:40

标签: c++ c comparison performance

假设我用C ++编写了一个程序而没有使用RTTI和运行时多态(没有虚函数,没有虚拟继承),并且类没有私有/受保护成员,也没有使用C ++特定的头文件(即使用C头文件:cstringcstdio,...而不是stringiostream,...)。

然后我想在C中编写一个类似的程序,其中函数的第一个参数类型对应于相关的struct

例如:

//C++ code

struct Custom
{
    int a;
    Custom() { }
    void change() { }
    ~Custom() { }
};

int main()
{
    Custom m; //init m
    m.change();
    //destroy m
}

/*C code*/

struct Custom
{
    int a;
};
void custom_init(Custom* like_this) { }
void custom_change(Custom* like_this) { }
void custom_destroy(Custom* like_this) { }

int main()
{
    Custom m;
    custom_init(&m);
    custom_change(&m);
    custom_destroy(&m);
}

C ++程序是否比类似的C程序慢(一般)?如果是的话,为什么C程序会更快?我知道,C ++使用RAII设计模式进行内存管理,这是慢的原因吗?

我听说有些人说C程序更快......为什么?

编辑:为什么关闭此问题?我想知道c ++是否还做了我们不需要的东西,以及它如何影响性能(让它更慢?更快?或者没有?)。

3 个答案:

答案 0 :(得分:6)

C ++不使用RAII。您 CAN 在您的c ++程序中使用RAII 只要你在C ++和C中完成同样的事情, 两个程序都应该一样快 用C或C ++编写快速程序不是编程语言的问题,而是你使用什么样的功能。

答案 1 :(得分:4)

直到你尝试,你才会知道。如果C ++使用C不支持的任何东西(例如构造函数,析构函数甚至非虚方法),那么可能会变慢。

但差异可能很小,以至于无法察觉。

C ++的早期实现可能比C慢,但这是任何软件的本质。它随着时间的推移而改善。

测量,不要猜测!描述您的特定代码,看看哪个更快。但即使C代码 更快,丢失所有额外功能的代价也可能过高。执行速度只有一个速度,很少是重要速度。 认为哪种速度最重要的是发展速度。

答案 2 :(得分:2)

不,这几乎肯定是假的。 RAII本身不会使程序变慢。 C和C ++编译器可能会为这些示例生成几乎相同的代码。