1

为什么一个简单的C ++程序会生成这么多分支命令?在Linux上使用perf

我一定在做一些愚蠢的事情或错误地使用了perf

 #include <iostream> int main() { return 0; }

编译命令(使用g ++-9.2.1)

 g++ -std=c++17 -Wall -Wextra -pedantic -O3 Source.cpp -o prog

跟随教程

stat运行命令并收集性能计数器统计信息

我尝试过

perf stat ./prog

并在输出中

 560,957 branches # 303.607 M/sec 16,181 branch-misses # 2.88% of all branches

问题是为什么?运行此命令之前,我应该“清理”寄存器吗?这正常吗?

已提交 December 02nd 2020 通過 Admin

答案
0

大约80%的分支来自动态链接。需要打开文件,然后需要分析动态库。这需要大量的决策,因为必须对文件的内容进行测试,以查看其格式,所包含的部分等。

其余的20%中的大多数恰好是在可执行文件上运行的相同逻辑。它具有复杂的格式,并且代码必须解析该格式以找出其包含的节,找到每个节的结尾,并决定在程序开始执行之前如何将它们布置在内存中。

Admin | 10个月前



枪支相关