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

标签 c++ visual-studio profiler

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

下面是我最近进行的分析 session 的示例。虽然此屏幕截图中的百分比相当低(0.9% 和 <0.1%),但我发现每种方法的百分比在 0% 和 25% 之间波动。

sample profile

或者

enter image description here

最佳答案

这些循环可能来自调用局部对象的构造函数/析构函数

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

此外,根据调用约定传递/提取参数和保存堆栈可能会在进入和退出时增加一些循环。

如果您得到 25% 的值,那可能是因为您在函数主体中的工作量较少。

关于c++ - Visual Studio CPU-采样进入/退出方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26927890/

相关文章:

C++重载运算符的工作原理

c++ - 来自给定结构的任何类型的 vector

visual-studio - 是什么阻止 Cocotron 在 Visual Studio 而不是 Mac OS X 上交叉编译?

visual-studio - VS2017 - 应用程序洞察 : The account does not have permission to access the AI resource

c++ - 使用上一次调用的结果递归调用每个元组成员

c# - C# 中是否有与 IEnumerable<T> 等效的标准 C++?

c# - 使用 Visual Studio 2010 将解决方案文件添加到 asp.net 1.1 应用程序

profiling - gprof 的替代品

Java 分析器 : JProbe Replacement for Mac?

performance - Tomcat 尖峰并消耗所有可用的 CPU