我正在尝试使用gprof命令:gprof -s executable.exe gmon.out gmon.sum
来合并从我的两个程序运行中收集的分析数据。但是出现以下错误:
gprof:在总共196608字节之后分配3403207348字节的内存不足
我的程序很简单(只有一个for
循环)。如果我运行一次,运行时间太短(显示0.00s),以便记录gprof。
在CygWin中,我执行以下步骤:
gcc -pg -o fl forAndWhilLoop.c
fl(运行程序)
mv gmon.out gmon.sum
fl(运行程序)
gprof -s fl.exe gmon.out gmon.sum
gprof fl.exe gmon.sum> gmon.out
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 :(得分: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