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 を呼び出していると考えるのはなぜですか? プロファイラーを正しく使用するにはどうすればよいですか?