我尝试使用valgrind来描述一个简单的c prog:
[zsun @ nel6005001~] $ valgrind --tool = memcheck ./fl.out
== 2238 == Memcheck,内存错误检测器
== 2238 == Copyright(C)2002-2009,GNU GPL'd,Julian西沃德等人.
== 2238 ==使用Valgrind-3.5.0和LibVEX; 重新运行-h版权信息
== 2238 ==命令:./ fl.out
== 2238 ==
== 2238 ==
== 2238 == HEAP SUMMARY:
== 2238 ==在退出时使用:1,168字节in 1个块
== 2238 ==总堆使用量:1个allocs,0个frees,1,168个字节分配
== 2238 ==
== 2238 == LEAK SUMMARY:
== 2238 ==绝对丢失:0个块中的0个字节
== 2238 = =间接丢失:0个块中的0个字节
== 2238 ==可能丢失:0个块中的0个字节
== 2238 ==仍然可达:1个块中的1,168个字节
== 2238 ==抑制:0个块中的0个字节
== 2238 ==重新运行--leak-check = full以查看泄漏内存的详细信息
== 2238 ==
== 2238 ==对于检测到的和抑制的错误计数,请重新运行:-v
== 2238 ==错误摘要:0错误来自0上下文(被抑制:12来自8)
分析计时器已过期
我试图描述的c代码如下:
void forloop(void){
int fac=1;
int count=5;
int i,k;
for (i = 1; i <= count; i++){
for(k=1;k<=count;k++){
fac = fac * i;
}
}
}
Run Code Online (Sandbox Code Playgroud)
"分析计时器到期"出现了,这是什么意思?如何解决这个问题呢?谢谢!
mar*_*k4o 18
问题是你在编译的程序上使用valgrind -pg.你不能一起使用valgrind和gprof.如果你在Linux上并且需要在valgrind下分析程序的实际模拟,那么valgrind手册建议使用OProfile.
你将无法10000!像那样进行计算。您将需要某种bignum计算阶乘的实现。这是因为int“通常”是 4 个字节长,这意味着“通常”它可以容纳2^32 - 1(signed int, 2^31) -13!比这个长。即使你使用了unsigned long(“通常”8 个字节),当你到达 时你也会溢出21!。
至于“分析计时器过期”的含义 - 这意味着 valgrind 收到了信号SIGPROF:http://en.wikipedia.org/wiki/SIGPROF(可能意味着您的程序花费了太长时间)。