valgrind,分析计时器到期了吗?

mar*_*tin 10 valgrind

我尝试使用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.


lau*_*ura 0

你将无法10000!像那样进行计算。您将需要某种bignum计算阶乘的实现。这是因为int“通常”是 4 个字节长,这意味着“通常”它可以容纳2^32 - 1(signed int, 2^31) -13!比这个长。即使你使用了unsigned long(“通常”8 个字节),当你到达 时你也会溢出21!

至于“分析计时器过期”的含义 - 这意味着 valgrind 收到了信号SIGPROFhttp://en.wikipedia.org/wiki/SIGPROF(可能意味着您的程序花费了太长时间)。