我已经为性能问题苦苦挣扎了很长一段时间,最近我意识到我从 visual studio 运行时获得的性能没有任何意义。
不过,令我感到惊讶的是,根据我的调试方式,我的表现会大不相同:当我从 visual studio 运行我的程序时,即使在 Release模式下,它也比我运行我的程序时慢 10 倍以上直接,然后将其附加到 visual studio 调试器。您知道这种差异从何而来吗?
最佳答案
当您将它运行到调试器中时,Visual 会在运行时将大量测试插入到您的可执行文件中:
- 堆损坏检查
- 堆栈损坏检查
- 内存泄漏检查
- 有些甚至更微妙,尤其是当您运行 CRT 时
它通过插入一个取代标准内存分配器库的自定义内存分配器库来实现。
您对 new
、delete
的所有调用以及您所有的堆栈操作(进入/退出函数)都被监视...
是的,对于性能分析,不要遇到 VS 调试器。
如果您想展开代码中发生的事情,可以在这里查看答案:
Is there a good Valgrind substitute for Windows?
特别是第二个答案有有趣的指针。 建议的工具之一非常有用:http://www.codersnotes.com/sleepy
关于c++ - 为什么将可视化调试器附加到我的程序比直接从 visual studio 运行它更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17194127/