CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C++ Builder >  基础类

C++怎么这么慢?

楼主sztony(最爱美眉)2004-05-02 09:49:14 在 C++ Builder / 基础类 提问

我用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

相关问题

  • c++ builder 编译怎么这么慢?
  • C#怎么这么烂
  • C++ Builder 怎么这么烂??????????????
  • 现在做C#的怎么这么少
  • dev c++编译为什么这么慢?
  • 怎么感觉C/C++论坛这么冷,比VC论坛差多了。
  • c#怎么读?
  • c怎么学?
  • C#怎么念?
  • 怎么c++

关键词

  • c++
  • stime
  • include
  • time

得分解答快速导航

  • 帖主:sztony
  • shadowstar

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo