2010-02-01 97 views
3

我正嘗試使用gprof命令:gprof -s executable.exe gmon.out gmon.sum來合併從我的兩個程序中收集的分析數據。但出現以下錯誤:內存不足錯誤。正在分配...

gprof的:一共有196608個字節

我的計劃出來後的內存分配3403207348個字節很簡單(只有一個for循環)。如果我運行一次,運行時間太短(它顯示0.00s)gprof記錄。

Cygwin中,我做以下步驟:

  1. 的gcc -o -pg FL forAndWhilLoop.c

  2. FL(運行程序)

  3. MV是gmon.out gmon .sum

  4. fl(運行程序)

  5. gprof的-s fl.exe是gmon.out gmon.sum

  6. gprof的fl.exe gmon.sum>是gmon.out

  7. gprof的fl.exe

我的程序:

int main(void) 
{ 
    int fac=1; 
    int count=10; 
    int k; 

    for(k=1;k<=count;k++) 
    { 
     fac = fac * k; 
    } 

    return 0; 
} 

所以任何人都可以幫助我解決這個問題嗎?謝謝!

+0

發表一些代碼。 – 2010-02-01 10:21:00

+0

發佈您的所有步驟。似乎爲我工作。 – 2010-02-02 09:45:08

回答

0

如果你想要的只是時間,在我的機器上它是105ns。代碼如下:

void forloop(void){ 
    int fac=1; 
    int count=10; 
    int k; 

    for(k=1;k<=count;k++) 
    { 
     fac = fac * k; 
    } 
} 

int main(int argc, char* argv[]) 
{ 
    int i; 
    for (i = 0; i < 1000000000; i++){ 
     forloop(); 
    } 
    return 0; 
} 

想一想嗎?我用了一個手持秒錶。由於它運行10^9次,秒=納秒。

像這樣展開內部循環將時間縮短爲92ns;

int k = 1; 
while(k+5 <= count){ 
    fac *= k * (k+1) * (k+2) * (k+3) * (k+4); 
    k += 5; 
} 
while(k <= count){ 
    fac *= k++; 
} 

切換到從調試發佈版本中把它降低到21ns。你只能期望在實際熱點中有這樣的加速,這是。