C++怎么这么慢?
我用C++写了个极为简单的小程序:
//*************************
// C++代码
//*************************
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <time.h>
int main(int argc, char* argv[])
{
int i,j,k;
time_t stime,etime;
stime = time(NULL);
k = 0;
for (i=1 ;i<=100000; ++i)
for (j=1 ;j<=100000; ++j)
k = k+1;
etime = time(NULL);
printf ("run time is %f",difftime(etime,stime));
getche();
return 0;
}
在C++ BUILDER编译运行,要40秒钟左右才能运行完,在VC下测试,也一样也要40秒,
可我把它改为DELPHI形式,仅仅10秒多就运行完了,为何相差那么远?
哪位高手能解释一下?
//*************************
// DELPHI代码
//*************************
var
i,j,k:integer;
stime,etime:longint;
begin
stime := gettickcount;
k:=0;
for i:=1 to 100000 do
for j:=1 to 100000 do
k := k+1;
etime := gettickcount;
form1.Label1.caption := floattostr((etime - stime)/1000);
end;
问题点数:20、回复次数:22Top
1 楼PPower(月亮光光,照地堂)回复于 2004-05-02 11:18:16 得分 0
把
k := k+1;
改成:
k := k+100;
再試試。
Top
2 楼matq2008(叶子.net)回复于 2004-05-02 11:24:39 得分 0
你两边的代码不一样呀,怎么对比!Top
3 楼sztony(最爱美眉)回复于 2004-05-02 11:45:52 得分 0
一样的呀,哪里不一样呢?都是循环100000 * 100000 次,然后K = K+1
用K = K + 1000也一样呀,
到底是C的速度比不上PASCAL,还是C的写法有问题,哪位能提高该C程序的执行效率?Top
4 楼Aa7643()回复于 2004-05-02 13:25:27 得分 0
实际上CB就是不比DELPHI慢!!Top
5 楼matq2008(叶子.net)回复于 2004-05-02 13:39:38 得分 0
k++
真正的比较你应该再做一个程序,启动这两个进程,监视它们的执行情况,而不是在里面的时间显示Top
6 楼shadowstar(CodeFast for Delphi & C++Builder)回复于 2004-05-02 15:15:28 得分 20
这和你的编译设置有关吧
单位(秒)
BCB6:
Debug 46.000
Release 11.000
VC7:
Debug 31.000
Release 0.000Top
7 楼matq2008(叶子.net)回复于 2004-05-02 18:01:48 得分 0
正在研究vc7.1中...Top
8 楼yingying0808(盈盈)回复于 2004-05-02 18:11:44 得分 0
一个是time,一个是gettickcount,两个函数所花的时间根本不一样,比较什么呀,C的你换GetTickCount函数,不会比Delphi的慢。Top
9 楼sztony(最爱美眉)回复于 2004-05-02 20:47:21 得分 0
我试过了,在C++ BUILDER中用GetTickCount一样的慢呀。
何况这个程序与是否用GetTickCount或者time的关系不大吧。Top
10 楼sztony(最爱美眉)回复于 2004-05-02 21:26:19 得分 0
shadowstar(天作棋盘星作子,谁人敢下?) 说得对,不愧是大师,
我试了这些选项,确实C++的速度就提高很多了,尤其是VC++,TM简直神速!比闪电还快!Top
11 楼tiegerium(/*唐秀观*/)回复于 2004-05-02 22:20:21 得分 0
我的:
BCB6 Debug 44.00
Release 12.00
vc6 Debug 34.00
Release 0.00Top
12 楼tiegerium(/*唐秀观*/)回复于 2004-05-02 22:25:46 得分 0
bcb6再没办法提高速度了。哎!borland的编译器比不过MS.Top
13 楼tiegerium(/*唐秀观*/)回复于 2004-05-02 22:37:10 得分 0
哈,bcb6在Console向导中不选vcl是速度有了提高了:
Debug: 37.00
Release: 12.00Top
14 楼shadowstar(CodeFast for Delphi & C++Builder)回复于 2004-05-02 22:49:03 得分 0
哪里比不过?
MS的不过是在编译的时候把结果算出来了,我想不会有谁这么写程序的吧?
如果让MS的编译器也算一下的话,它们的速度都差不多。
不信的话把
int i,j,k;
改成
int i, j;
volatile int k;Top
15 楼tiegerium(/*唐秀观*/)回复于 2004-05-02 23:09:40 得分 0
我该了:vc6
Debug:36.00
Release:35.00
怎么回事?
bcb6
Debug: 37.00
Release: 12.00
The volatile keyword is a type qualifier used to declare that an object can be modified in the program by something other than statements, such as the operating system, the hardware, or a concurrently executing thread.
Top
16 楼shadowstar(CodeFast for Delphi & C++Builder)回复于 2004-05-02 23:27:25 得分 0
说明VC还是有进步哦,7.0的就12.00了Top
17 楼kerbcurb()回复于 2004-05-03 04:04:18 得分 0
DEv-C++ 10s
BCB6 release 12s
debug 39sTop
18 楼kerbcurb()回复于 2004-05-03 04:18:22 得分 0
Dev-C++
文件最小21.6k
时间10.0s
BCBX1.0
61.7k
时间14.0s
bcb6更大
时间
12.0sTop
19 楼tiegerium(/*唐秀观*/)回复于 2004-05-04 18:05:50 得分 0
VC和BCB都编译以下代码:
int main(int argc, char* argv[])
{
int i,j;
volatile int k;
time_t stime,etime;
stime = time(NULL);
k = 0;
for (i=1 ;i<=100000; ++i)
for (j=1 ;j<=100000; ++j)
k = k+1;
etime = time(NULL);
printf ("run time is %f",difftime(etime,stime));
getche();
return 0;
}
结果是:
VC:Release:1、27.000000,2、26.000000,3、25.000000,4、26.000000,25.000000。
BCB:Release:1、29.000000,2、29.000000,3、29.000000,4、35。000000,
5、35.000000。
由此看来bcb还是比vc慢一点,不知道什么原因。
前天bcb得12.000000是因为volatile int k;写成 int k;Top
20 楼diligent_boy(笨笨)回复于 2004-05-05 10:37:09 得分 0
up,up!!Top
21 楼lvjack(追逐梦想)回复于 2004-05-05 13:23:22 得分 0
呵呵,补充一点
volatile声明是指该变量可以由硬件或者系统来更改,应用一例
const volatile ……
指定该变量不可以由程序中的代码改变,只能由系统或硬件等外部条件改变
int i,j,k;
改成
int i, j;
volatile int k;
是避免了VC在编译的时候把结果算出来,因为他要考虑系统的影响:)
Top
22 楼raid79(山鹰)回复于 2004-05-05 20:05:11 得分 0
upTop




