【问题标题】:Out of memory error. Allocating...内存不足错误。分配...
【发布时间】:2011-01-11 15:59:55
【问题描述】:

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

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

我的程序很简单(只有一个for 循环)。如果我运行一次,运行时间太短(显示为 0.00 秒),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

我的程序:

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

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

    return 0;
}

那么谁能帮我解决这个问题?谢谢!

【问题讨论】:

  • 发布您的所有步骤。似乎对我有用。

标签: gprof


【解决方案1】:

如果你只想计时,在我的机器上它是 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。您只能在实际热点中期望这种加速,就是这样。

【讨论】:

    【解决方案2】:

    似乎应该执行 pprof 而不是 gprof

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-25
      • 1970-01-01
      • 2018-07-15
      • 2014-07-28
      相关资源
      最近更新 更多