Visual Studio CPU采样进入/退出方法

时间:2014-11-14 10:29:11

标签: c++ visual-studio profiler

在Visual Studio 2013中分析我的应用程序时(可能也适用于其他版本),我注意到应用程序在进入/退出方法时会消耗周期。这些周期来自哪里,我最终如何消除它们?

以下是我最近做过的分析会话的示例。虽然此截图中的百分比相当低(0.9%和<0.1%),但我发现每种方法的百分比在0%到25%之间波动。

sample profile

或者

enter image description here

1 个答案:

答案 0 :(得分:2)

这些循环可以来自调用本地对象的构造函数/析构函数

要测试这个理论,你可以创建一个类,r 在析构函数中不是计算循环确保编译器不会优化它。然后在您的函数代码中,在堆栈上创建该类的对象(不动态分配它)。当函数退出时,将调用本地对象的析构函数 - 因此 - 您的循环。您应该看到一致的循环计数。

同样根据调用约定传递/提取参数并保存堆栈可能会在进入和退出时添加更多周期。

如果您获得25%的值,可能是因为您在该函数体内的工作量较少。