首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++程序的性能分析

C++程序的性能分析
EN

Software Engineering用户
提问于 2012-04-14 06:53:35
回答 7查看 13.3K关注 0票数 1

如何使用C++度量C++程序的性能?

我想要衡量的具体指标是:

  • 使用的内存(空间)
  • 持续时间(时间)
EN

回答 7

Software Engineering用户

发布于 2012-04-14 16:22:05

对于分析方面,只要您使用的是GNU,就可以使用gprof。它会给你这样的结果:

每个样本计算为0.01秒。

代码语言:javascript
复制
  %   cumulative   self              self     total           
 time   seconds   seconds    calls  ms/call  ms/call  name    
 33.34      0.02     0.02     7208     0.00     0.00  open
 16.67      0.03     0.01      244     0.04     0.12  offtime
 16.67      0.04     0.01        8     1.25     1.25  memccpy
 16.67      0.05     0.01        7     1.43     1.43  write
 16.67      0.06     0.01                             mcount
  0.00      0.06     0.00      236     0.00     0.00  tzset
  0.00      0.06     0.00      192     0.00     0.00  tolower
  0.00      0.06     0.00       47     0.00     0.00  strlen
  0.00      0.06     0.00       45     0.00     0.00  strchr
  0.00      0.06     0.00        1     0.00    50.00  main
  0.00      0.06     0.00        1     0.00     0.00  memcpy
  0.00      0.06     0.00        1     0.00    10.11  print
  0.00      0.06     0.00        1     0.00     0.00  profil
  0.00      0.06     0.00        1     0.00    50.00  report

链接到数据

THe的伟大之处在于,它具有系统中的所有功能,这样您就可以准确地查看要查看的函数。

票数 5
EN

Software Engineering用户

发布于 2012-04-14 14:32:55

对于持续时间(时间),我也会使用分析器。但是,如果您特别想跟踪某些方法,我已经使用了定义一个小计时器类的技巧,它在构造函数中启动计时器并在析构函数中停止它。然后,您需要做的就是在要分析的方法的开头定义一个本地计时器变量,如下所示:

代码语言:javascript
复制
MyClass::myMethod()
{
    MyTimer timer("MyClass::myMethod");

    ...
}

计时器变量的析构函数将记录该方法的名称和退出该方法时的持续时间。

是的,使用分析器要干净得多,而且您不需要更改代码(尽管我通常会在源代码的单独副本中添加计时器变量,所以以后不需要清理),但是我发现,如果您想要分析的代码非常本地化,这个方法是使用分析器的一个有效的替代方案。

只是我的两分钱。

票数 4
EN

Software Engineering用户

发布于 2012-04-14 07:06:54

我同意Pubby的观点,即使用外部工具进行分析更好。以下是一些提示:

为了粗略估计可执行文件占用的时间,我将使用像time这样的linux工具。运行可执行的spam如下:

代码语言:javascript
复制
time spam

给你反馈它花了多长时间。您还可以编写一个小型Python脚本,它可以执行几次,并将结果平均化。有关如何度量应用程序使用的内存的一些提示,请参见这根线

但这只提供了程序的累积视图。更有趣的是将此分析分解为代码的不同部分。您可以通过分析代码来做到这一点,例如使用GNU轮廓仪 gprof。这将向您概述代码的哪些部分花费了多少时间。这可以让您了解哪些地方可以花费更多的时间进行优化,而代码的性能并不是很重要。

票数 2
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/144417

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档