gpt4 book ai didi

c++ - 协助 C++ 程序分析

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:31:28 27 4
gpt4 key购买 nike

我真的很想知道在我的应用程序中不同的例程花费了多少时间。我正在使用带有 Dev-C++ IDE 和 gprof 的 GCC 3.4.2 进行分析。这是开始结果文件:

平面轮廓:

Each sample counts as 0.01 seconds.
% cumulative self self total
time seconds seconds calls s/call s/call name
7.48 0.89 0.89 __gnu_cxx::__exchange_and_add(int volatile*, int)
7.39 1.77 0.88 _Unwind_SjLj_Register
6.22 2.51 0.74 _Unwind_SjLj_Unregister
3.70 2.95 0.44 2425048 0.00 0.00 rt::wctree_node<std::vector<OPT_Inst, std::allocator<OPT_Inst> > >::get(std::string, bool&)
3.28 3.34 0.39 std::string::operator[](unsigned int)
3.11 3.71 0.37 std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()
2.86 4.05 0.34 std::string::_M_mutate(unsigned int, unsigned int, unsigned int)
2.69 4.37 0.32 __gnu_cxx::__atomic_add(int volatile*, int)
2.61 4.68 0.31 38655 0.00 0.00 SPSBase::containerBoxFillSet(double, double, double, double)

有人可以向我解释除了 rt::wctree 之外的第一个(显然不是我制作的),它们来自哪里以及它们在程序中的目标是什么?

最佳答案

两个_Unwind在我看来就像异常处理。

_M_mutate似乎表明您正在复制字符串(libstdc++ 实现的写时复制行为的实现细节),配置文件中字符串析构函数的存在似乎强调了这一点。

我猜原子操作也来自字符串 COW 行为,因为内部缓冲区是引用计数的。

看来您的大部分时间都花在了复制 std::string 上周围。

编辑:好的,现在看看你的rt::wctree<>::get(std::string, bool&) .参数通过拷贝传递。 2425048 次调用,2425048 次复制。你为什么不试试 const&在这里?

关于c++ - 协助 C++ 程序分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11485237/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com