C++效率问题

来源:百度知道 编辑:UC知道 时间:2024/06/05 20:06:03
昨天心血来潮,突然想看看不同的C++编译器编译出来的.exe文件有什么不同.
因为我手头上只有Visual C++6.0和Dev-C++4.9.9.0,所以我用的就是这两款软件.
我选定了一段C代码和一段C++代码,功能几乎是一样的,都是在Console上显示一行字"请按任意键继续...",分别让这两款编译器生成可执行文件

.

其中C语言的源代码如下:
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]){
system("PAUSE");
return 0;
}
Visual C++6.0编译出来的.exe(debug)大小176KB
Dev-C++4.9.9.0编译出来的.exe大小13.9KB

C++语言的源代码如下:
#include <iostream>
#include <stdlib.h>

using namespace std;

int main(int argc, char *argv[]){
system("PAUSE");
return 0;
}
Visual C++6.0编译出来的.exe(debug)大小248KB
Dev-C++4.9.9.0编译出来的.exe大小414KB

我想问的是,我在一本书上看到这样一句话:C++与相同功能的C在执行效率上的差距在5%以下.
可是对功能几乎相同的两段很简单的代码,VC编译出来的C++语言的.exe是248KB,C语言的.exe是176KB,相差(248-176)/176=41%;DC编译出来的

C++语言的.exe是414KB,C语言的.exe是13.9KB,相差(414-13.9)/13.9=28.78倍.究竟是这句话错了还是我的比较方法有问题

关于这个问题,很大的一部分是因为包含的编译的头文件和链接库代码数量不同,C的功能较基础,自然编译出来的比较小。C++包含库的较多,功能较复杂,自然比较大。
编译文件(.exe .dll .lib)大小并不是衡量执行速度的标准。
最好是把 VC++ 和Dev C++ (就是GCC,G++)的头文件和链接库用同一个,这样的实验才有价值。
举个例子,你的exe包含了一张10MB的电影,总不能说它比同一个不包含电影的exe运行效率低。

因为你使用了using namespace std;
你把这句去掉再试试?
我用vs2005,debug下只有52.0Kb

using namespace std;将会使编译器包含std命名空间,自然会降低效率,同时使程序变大.通常大的项目都不会用这种方式使用命名空间.

C++的编译结果会大很多, 这是正常的。 C是比较简单的语言,而C++附带的东西相对就比较多了。 人家说的是速度差别吧, 而不是编译结果的大小

编译器之间的比较,debug版本没什么可比的, 两个编译器都打开 O2优化再看结果吧。

不是编译出来的可执行文件小就是好,如果是一个编译器静态连接,另一个编译器是动态连接,那可执行文件相差比较大是很正常的。程序的执行效率和可执行文件的大小没有什么关系。

所以,你做的这个对比实验出发点就不对。

你看的真仔细.........
不排除这种可能...呵呵