我一直在使用gprof对程序进行性能分析,并发现以下内容出现在顶部附近:
Each sample counts as 0.01 seconds.
% cumulative self self total
time seconds seconds calls s/call s/call name
17.50 6.69 6.69 _mcount_private
12.14 11.33 4.64 __cosl_internal
11.02 15.54 4.21 __sinl_internal
我非常大量地使用cmath库中的余弦和正弦函数,并且由于cos和sin是这些函数调用的名称,所以也许就是这些。但是,在探查器的更下方,我也有
% cumulative self self total
time seconds seconds calls s/call s/call name
2.93 23.25 1.12 cos
2.51 24.21 0.96 sin
这令人困惑,因此我不确定__cosl / sinl_internal的实际含义。尝试使用Google问题时,没有得到有意义的结果。
这是使用的构建命令:
i686-w64-mingw32-g++.exe -Wshadow -Winit-self -Wredundant-decls
-Wcast-align -Wfloat-equal -Wunreachable-code -Wmissing-include-dirs
-pedantic-errors -pedantic -Wall -std=c++14 -fexceptions -O2 -std=c++14
-pg -DSFML_STATIC -std=c++14
答案 0 :(得分:1)
这两个函数是cos
和sin
中的实现细节。
如果您查看https://github.com/Alexpux/mingw-w64/blob/master/mingw-w64-crt/math/cos.def.h#L51,则三角函数会先检查该值是NaN
还是无穷大,然后再计算实际值。这就是为什么您会获得两次成功的原因:
您可以将内部函数视为cos / sin调用。根据生成的调试信息以及优化级别,它们可能不会显示从sin / cos调用它们的事实。