我正在尝试使用gprof命令:gprof -s executable.exe gmon.out gmon.sum
合并从我的程序的两次运行中收集的分析数据。但出现以下错误:
gprof:在总共196608个字节之后分配3403207348个字节的内存不足
我的程序很简单(只有一个for
循环)。如果我运行一次,运行时间太短(显示0.00s),以便记录gprof。
在CygWin中,我执行以下步骤:
我的节目:
int main(void)
{
int fac=1;
int count=10;
int k;
for(k=1;k<=count;k++)
{
fac = fac * k;
}
return 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。你只能期望在一个真正的热点中加速,这是。
似乎应该执行pprof而不是gprof