- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 gprof 优化我的 C++ 代码,我获得了以下结果:
Flat profile:
Each sample counts as 0.01 seconds.
% cumulative self self total
time seconds seconds calls s/call s/call name
21.49 2.31 2.31 _fu2___ZSt4cout
12.93 3.70 1.39 1560037 0.00 0.00 __gnu_cxx::new_allocator<DataINSPVAS>::construct(DataINSPVAS*, DataINSPVAS const&)
8.56 4.62 0.92 30267700 0.00 0.00 __gnu_cxx::new_allocator<AntennaData>::construct(AntennaData*, AntennaData const&)
6.14 5.28 0.66 261159927 0.00 0.00 __gnu_cxx::__normal_iterator<char*, std::string>::__normal_iterator(char* const&)
5.40 5.86 0.58 149234244 0.00 0.00 bool __gnu_cxx::operator!=<char*, std::string>(__gnu_cxx::__normal_iterator<char*, std::string> const&, __gnu_cxx::__normal_iterator<char*, std::string> const&) ...
根据这个平面配置文件,函数 fu2__ZSt4cout 使用了 21.49% 的运行时间。有谁知道 fu2__ZSt4cout 代表什么?
最佳答案
(快点:关于 SO 的问题有很多。)
首先,gprof
是一个“CPU 分析器”。这意味着在 IO 或任何其他阻塞系统调用期间,它是关闭。您的程序可以运行 100 秒,在 IO 上花费 99 秒,而 gprof
将表现得好像它只花费了 1 秒。
其次,您正在查看自用时间。自用时间没用,除了那些在不调用子函数的情况下处理很多的函数。因此,如果您有整数数组的冒泡排序,并且您在其中花费了大部分时间,gprof
会将其显示为瓶颈。将其更改为对字符串进行排序,其中比较需要调用函数,并且 gprof
将在 strcmp
中显示一个很大的 %,这根本不是问题所在。
从你的输出来看,我猜你的程序主要是做 IO,所以如果它实际运行的时间很少,其中很大一部分是进入和退出,我并不感到惊讶库 IO 例程。您还在 new
和迭代器中展示了很多自学时间。一点也不奇怪。
如果您正在寻找一个分析器,您需要一个能够在挂钟时间(而不是 CPU 时间)对整个调用堆栈进行采样并报告每行代码出现在这些堆栈上的时间百分比的工具。一个这样的分析器是 Zoom .(顺便说一句,不要误以为您需要高频样本才能获得“准确性”。如果您获得 1000 个样本,这就足够了,看看什么需要时间。)
当我调整性能时,我使用 this method .
关于c++ - _fu2___ZSt4cout 在我的 C++ 代码中占用了 21.49% 的运行时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21418179/
我是一名优秀的程序员,十分优秀!