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