2017-08-07 18 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