如何使用C++度量C++程序的性能?
我想要衡量的具体指标是:
发布于 2012-04-14 16:22:05
对于分析方面,只要您使用的是GNU,就可以使用gprof。它会给你这样的结果:
每个样本计算为0.01秒。
% 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的伟大之处在于,它具有系统中的所有功能,这样您就可以准确地查看要查看的函数。
发布于 2012-04-14 14:32:55
对于持续时间(时间),我也会使用分析器。但是,如果您特别想跟踪某些方法,我已经使用了定义一个小计时器类的技巧,它在构造函数中启动计时器并在析构函数中停止它。然后,您需要做的就是在要分析的方法的开头定义一个本地计时器变量,如下所示:
MyClass::myMethod()
{
MyTimer timer("MyClass::myMethod");
...
}计时器变量的析构函数将记录该方法的名称和退出该方法时的持续时间。
是的,使用分析器要干净得多,而且您不需要更改代码(尽管我通常会在源代码的单独副本中添加计时器变量,所以以后不需要清理),但是我发现,如果您想要分析的代码非常本地化,这个方法是使用分析器的一个有效的替代方案。
只是我的两分钱。
发布于 2012-04-14 07:06:54
我同意Pubby的观点,即使用外部工具进行分析更好。以下是一些提示:
为了粗略估计可执行文件占用的时间,我将使用像time这样的linux工具。运行可执行的spam如下:
time spam给你反馈它花了多长时间。您还可以编写一个小型Python脚本,它可以执行几次,并将结果平均化。有关如何度量应用程序使用的内存的一些提示,请参见这根线。
但这只提供了程序的累积视图。更有趣的是将此分析分解为代码的不同部分。您可以通过分析代码来做到这一点,例如使用GNU轮廓仪 gprof。这将向您概述代码的哪些部分花费了多少时间。这可以让您了解哪些地方可以花费更多的时间进行优化,而代码的性能并不是很重要。
https://softwareengineering.stackexchange.com/questions/144417
复制相似问题