2017-08-07 23 views
-14

第一代码超过时限:正常工作提供了成功与0秒给定的两个代码有什么区别。一个给人当ideone运行和其他工作正常

int main() 
    { 
     int n=100000; 
     for(int i=0;i<n;i++) 
     for(int j=0;j<n;j++) 
     {} 
     cout<<"ffdfdf"; 
    } 

第二码时间:给定一个时间限制超过

int main() 
    { 
     int n=100000; 
     bool **a=new bool*[n]; 
     for(int i=0;i<n;i++) 
     { 
     bool[i]=new bool[n]; 
     for(int j=0;j<n;j++) 
     { 
      bool[i][j]=1; 
     } 
     } 
     cout<<"ffdfdf"; 
    } 

可以任何人都可以解释为什么这两个代码片段有很大的时间差异。我不理解它。

+6

这两个代码是完全不同的。第二个使用'new'这是相当昂贵的,先不和你在第二次分配的内存数量庞大, –

+2

什么都不做数十亿倍,通常会比显著做一些像分配的内存数十亿大块快的时代。 – StoryTeller

+0

在第一个程序中,一个好的编译器将能够优化它。在第二个程序中,你写了很多内存位置。 –

回答

5

bool[i]=new bool[n];极其昂贵参见其他陈述。

一个好的编译器将优化你的第一个程序cout << "ffdfdf";,因为它知道,循环就不会做任何事情。

一旦你与a条取代的大侠你bool这么第二个片段实际上编译,你会被告知与delete[]配对new[]电话。

+0

thanx的额外的信息......但即使当我试图把在循环第一个节目里面的一些语句的执行,很容易编译 – HKedia