首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

为什么G++编译出来的程序会比C++编译出来的慢那么多?[问]解决方案

2012-02-22 
为什么G++编译出来的程序会比C++编译出来的慢那么多?[问]如题……似乎效率相差近两倍!(G++慢很多)难道是版本

为什么G++编译出来的程序会比C++编译出来的慢那么多?[问]
如题……  

似乎效率相差近两倍!(G++慢很多)难道是版本问题?

这是我在PKU OJ提交的一道题的结果。  

优化前:  
2644831   flouse   1064   Accepted   220K   386MS   C++   1335B   2007-09-10   19:11:29    
2644828   flouse   1064   Time   Limit   Exceeded       G++   1335B   2007-09-10   19:10:27    

估化后:  
2644849   flouse   1064   Accepted   228K   105MS   C++   1342B   2007-09-10   19:15:07    
2644840   flouse   1064   Accepted   372K   169MS   G++   1342B   2007-09-10   19:13:01    

My   Source:
#include   <iostream>  
#include   <iomanip>  
#include   <cmath>  
using   namespace   std;  

//#include   <fstream>  
//ifstream   in( "cable.in ");  
//#define   cin   in  

int   n,   k;  
int   l[10000],   maxK;  
__int64   tl,   maxL,   start,   end;  

int   count(int   m){  
        if   (m   ==   0)   m   =   1;  
        int   num   =   0;  
        for   (int   i   =   0;   i   <   n;   i++){  
                num   +=   l[i]   /   m;  
        }  
        return   num;  
}  
//多CASE版  
//int   main(){  
//         float   tmp;  
//         while   (cin   > >   n   > >   k){  
//                 if   (n   ==   0   &&   k   ==   0)   break;  
//                 tl   =   0;  
//                 maxL   =   0;  
//                 for   (int   i   =   0;   i   <   n;   i++){  
//                         cin   > >   tmp;  
//                         l[i]   =   tmp*100;  
//                         if   (maxL   <   l[i])   maxL   =   l[i];  
//                         tl   +=   l[i];  
//                 }  
//                 start   =   0;  
//                 end   =   maxL   /   floorf(k*1.0/n+0.999999);  
//                 while(end   > =   start){  
//                         maxL   =   (start   +   end)   /   2;  
//                         maxK   =   count(maxL);  


//                         if   (maxK   <   k)   end   =   maxL-1;  
//                         else   start   =   maxL+1;  
//                 }  
//                 if   (maxK   <   k   &&   maxL   !=   0)   maxL--;  
//                 tmp   =   maxL   /   100.0;  
//                 cout   < <   setiosflags(ios::fixed)   < <   setprecision(2)   < <   tmp   < <   endl;  
//         }  
//         return   0;  
//}  

int   main(){  
        float   tmp;  
        cin   > >   n   > >   k;  
        tl   =   0;  
        maxL   =   0;  
        for   (int   i   =   0;   i   <   n;   i++){  
                scanf( "%f ",   &tmp);  
                l[i]   =   tmp*100;  
                if   (maxL   <   l[i])   maxL   =   l[i];  
                tl   +=   l[i];  
        }  
        start   =   0;  
        end   =   maxL;  
        while(end   > =   start){  
                maxL   =   (start   +   end)   /   2;  
                maxK   =   count(maxL);  
                if   (maxK   <   k)   end   =   maxL-1;  
                else   start   =   maxL+1;  
        }  
        if   (maxK   <   k   &&   maxL   !=   0)   maxL--;  
        tmp   =   maxL   /   100.0;  
        cout   < <   setiosflags(ios::fixed)   < <   setprecision(2)   < <   tmp   < <   endl;          
        return   0;  
}

[解决办法]
编译器没打到最优化编译时,默认策略是可以差很远的。
VC和BCB都喜欢默认启用更多的优化项,以现实它们的程序“快”
到大家都最优化后,各编译器基本没区别。
所以,很正常。

热点排行