了解基本代码分析

时间:2014-01-26 17:28:38

标签: c++ optimization performance refactoring visual-studio

我正在尝试了解分析并遵循此guide因此我尝试在Windows 7上对MS VS 2010上的以下代码进行分析。我不确定这是否是正确的问题

#include <iostream>
using namespace std;
int add(int,int);

int main()
{
    int x [100];

    for (int i=0;i<100;i++)
    {
        x[i]=i;
    }

    cout<<add(2,3);

    system("PAUSE");

}

int add (int x, int y)
{
    return x+y;
}

我得到了以下结果

enter image description here

enter image description here

根据指南High exclusive counts may indicate a performance bottleneck within the function itself.

似乎[apphelp.dll][ntdll.dll]基于高独占计数存在性能瓶颈。

这些是我的以下问题,我在理解文章时遇到了问题

1)70%的包容性样本是什么意思?这是否意味着70%的时间花在了这个功能上。这有什么意义?

2)独占样本的平均值为30%或0%是什么意思?这有什么意义?

3)对于图表,X轴是挂钟时间,Y轴怎么样?它有什么意义

4)我创建了一个函数:add(int x , int y ),它在配置文件报告中的位置??

5)[apphelp.dll][ntdll.dll]究竟是什么?我知道它们是动态链接库,但为什么它被置于功能之下。我在代码中看不到这样的函数

6)为什么GraphHot PathFunction doing the most individual work每次生成具有相同代码集的新报告时都会发生变化

7)我应该如何找到应用程序中的性能瓶颈并对其进行优化?

8)为什么像_mainCRTStartup[kernel32.dll]这样的函数有0%的独占样本,它是什么意思?

请原谅我提出这样的新手问题,我是代码性能分析的新手

1 个答案:

答案 0 :(得分:1)

我的理解:

1)包含表示在此函数中花费的时间,包括您在此函数中调用的函数所花费的时间。例如:包含(主要)包含添加时间,独占(主要)没有。

2)检查http://en.wikipedia.org/wiki/Microsoft_Windows_library_files#NTDLL.DLL    你的代码基本上什么都不做。大部分时间花在系统暂停上...你的代码执行1几纳秒,然后你需要一些时间按返回

3)这是cpu百分比的使用。超过100个时钟周期操作系统分配给你的程序有多少?

4)不确定,它可能已被内联...如果您使用/ Fa开关来获取程序集,在启用优化(O2)的情况下,您可能会看到编译器已翻译为“cout&lt;&lt; ;通过汇编添加(2,3)“cout&lt;&lt;&lt; 5”

5)你正在使用系统(“暂停”)和cout。那些会调用windows dll(你的os api)

6)图表:你的cpu正在做别的吗?你使用其他应用程序进行分析? 对于另外两个:取消系统(“暂停”)并检查它是否仍然发生变化

7)你的方法是正确的,但是这段代码没有做任何事情,所以你的应用在系统dll上花费的时间多于在代码中的时间:)

8)与上述相同。

尝试一个真正做某事的测试函数,比如一个带有指针和你自己的交换函数给出的比较的排序函数。你在swap()比较(..)和排序(..)函数上花了多少时间?

尝试这样的代码: http://www.ousob.com/ng/turboc/ng4686d.php

并比较一些shity对象,也许使用一个讨厌的交换函数与深拷贝。而且我知道你实际上会看到一些东西。