内存不足错误。分配...

时间:2010-02-01 10:18:36

标签: gprof

我正在尝试使用gprof命令:gprof -s executable.exe gmon.out gmon.sum来合并从我的两个程序运行中收集的分析数据。但是出现以下错误:

  

gprof:在总共196608字节之后分配3403207348字节的内存不足

我的程序很简单(只有一个for循环)。如果我运行一次,运行时间太短(显示0.00s),以便记录gprof。

在CygWin中,我执行以下步骤:

  1. gcc -pg -o 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

  8. 我的节目:

    int main(void)
    {
        int fac=1;
        int count=10;
        int k;
    
        for(k=1;k<=count;k++)
        {
            fac = fac * k;
        }
    
        return 0;
    }
    

    那么有人可以帮我解决这个问题吗?谢谢!

2 个答案:

答案 0 :(得分: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++;
}

从Debug切换到Release版本将其降低到 21ns 。你只能期望在一个真正的热点中加速,这就是。

答案 1 :(得分:0)

似乎应该执行 pprof 而不是 gprof