假设我用C ++编写了一个程序而没有使用RTTI和运行时多态(没有虚函数,没有虚拟继承),并且类没有私有/受保护成员,也没有使用C ++特定的头文件(即使用C头文件:cstring
,cstdio
,...而不是string
,iostream
,...)。
然后我想在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 ++是否还做了我们不需要的东西,以及它如何影响性能(让它更慢?更快?或者没有?)。
答案 0 :(得分:6)
C ++不使用RAII。您 CAN 在您的c ++程序中使用RAII 只要你在C ++和C中完成同样的事情, 两个程序都应该一样快 用C或C ++编写快速程序不是编程语言的问题,而是你使用什么样的功能。
答案 1 :(得分:4)
直到你尝试,你才会知道。如果C ++使用C不支持的任何东西(例如构造函数,析构函数甚至非虚方法),那么可能会变慢。
但差异可能很小,以至于无法察觉。
C ++的早期实现可能比C慢,但这是任何软件的本质。它随着时间的推移而改善。
测量,不要猜测!描述您的特定代码,看看哪个更快。但即使C代码 更快,丢失所有额外功能的代价也可能过高。执行速度只有一个速度,很少是重要速度。 我认为哪种速度最重要的是发展速度。
答案 2 :(得分:2)
不,这几乎肯定是假的。 RAII本身不会使程序变慢。 C和C ++编译器可能会为这些示例生成几乎相同的代码。