我正在尝试使用 gprof 命令:gprof -s executable.exe gmon.out gmon.sum
来合并从我的程序的 2 次运行中收集的分析数据。但是出现以下错误:
我的程序非常简单(只有一个 for
循环)。如果我运行一次,运行时间太短(显示 0.00 秒),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 。您只能期望在实际热点中实现这种加速,这就是。
关于gprof - 内存不足错误。正在分配...,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2175919/