2010-02-01 123 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。你只能期望在实际热点中有这样的加速,这是。