更深入的功能分析/仿真

时间:2010-12-26 13:48:48

标签: c assembly profiling emulation

大家好 圣诞节快乐 我需要一个建议,我有以下代码:

    int main()
{
    int k=5000000;
    int p;
    int sum=0;

    for (p=0;p<k;p++)
    {
        sum+=p;
    }

    return 0;
}

当我组装它时,我得到了

main:
    pushl   %ebp
    movl    %esp, %ebp
    subl    $16, %esp
    movl    $5000000, -4(%ebp)
    movl    $0, -12(%ebp)
    movl    $0, -8(%ebp)
    jmp .L2
.L3:
    movl    -8(%ebp), %eax
    addl    %eax, -12(%ebp)
    addl    $1, -8(%ebp)
.L2:
    movl    -8(%ebp), %eax
    cmpl    -4(%ebp), %eax
    jl  .L3
    movl    $0, %eax
    leave
    ret

如果我通过gprof运行它,我得到的主要执行最多,这是非常明显的! 然而,我想更进一步,能够知道L2或L3是否执行得最多。这里显然L3执行最多。还有某种分析器,模拟器可以为我提供整个代码的数据吗?

1 个答案:

答案 0 :(得分:1)

好吧,如果你不介意低技术,你可以通过单步或this way回答任何这样的问题。 对于后一种方法,程序的大小或复杂程度无关紧要。