在 Visual Studio 2013 中分析我的应用程序时(可能也适用于其他版本),我注意到应用程序在进入/退出方法时消耗周期。这些循环从何而来,最终如何消除它们?
下面是我最近进行的分析 session 的示例。虽然此屏幕截图中的百分比相当低(0.9% 和 <0.1%),但我发现每种方法的百分比在 0% 和 25% 之间波动。
或者
最佳答案
这些循环可能来自调用局部对象的构造函数/析构函数。
要测试这个理论,您可以创建一个类,该类在析构函数中运行一个计算循环,并确保编译器不会优化它。然后在您的函数代码中,在堆栈上创建该类的对象(不动态分配它)。当函数退出时,将调用局部对象的析构函数,因此 - 你的循环。您应该会看到一致的循环计数。
此外,根据调用约定传递/提取参数和保存堆栈可能会在进入和退出时增加一些循环。
如果您得到 25% 的值,那可能是因为您在函数主体中的工作量较少。
关于c++ - Visual Studio CPU-采样进入/退出方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26927890/