2

给定以下调用 f 或 g 的代码

#include <stdlib.h>
#include <stdio.h>

int f() {
    return 0;
}

int g() {
    return 1;
}

int main() {
    long sum = 0;
    for(int i = 0; i < 1000*1000*1000; i++) {
        int result;
        if(rand() % 2 == 0) {
            result = f();
        }
        else {
            result = g();
        }

        sum += result;
    }
    printf("%ld\n", sum);
}

我编译

g++ test.c -o doom -lprofiler -lunwind

并运行

CPUPROFILE=./test.txt ./test

然后生成一个gif

pprof --gif ./test ./test.txt > output.gif

我得到以下在此处输入图像描述

但是,我有从 f 到 g、f 到自身以及 g 到自身的边。没有优化(我再次尝试使用 -O0 以确保),并且我也尝试过使用和不使用 -lunwind。

为什么探查器认为 f 调用 g (以及它本身有时)?如何正确使用分析器?

4

0 回答 0