在Visual Studio 2013中分析我的应用程序时(可能也适用于其他版本),我注意到应用程序在进入/退出方法时会消耗周期。这些周期来自哪里,我最终如何消除它们?
以下是我最近做过的分析会话的示例。虽然此截图中的百分比相当低(0.9%和<0.1%),但我发现每种方法的百分比在0%到25%之间波动。
或者
答案 0 :(得分:2)
这些循环可以来自调用本地对象的构造函数/析构函数。
要测试这个理论,你可以创建一个类,r 在析构函数中不是计算循环,确保编译器不会优化它。然后在您的函数代码中,在堆栈上创建该类的对象(不动态分配它)。当函数退出时,将调用本地对象的析构函数 - 因此 - 您的循环。您应该看到一致的循环计数。
同样根据调用约定传递/提取参数并保存堆栈可能会在进入和退出时添加更多周期。
如果您获得25%的值,可能是因为您在该函数体内的工作量较少。