c++ - 为什么将可视化调试器附加到我的程序比直接从 visual studio 运行它更快?

标签 c++ performance visual-studio-2012

我已经为性能问题苦苦挣扎了很长一段时间,最近我意识到我从 visual studio 运行时获得的性能没有任何意义。

不过,令我感到惊讶的是,根据我的调试方式,我的表现会大不相同:当我从 visual studio 运行我的程序时,即使在 Release模式下,它也比我运行我的程序时慢 10 倍以上直接,然后将其附加到 visual studio 调试器。您知道这种差异从何而来吗?

最佳答案

当您将它运行到调试器中时,Visual 会在运行时将大量测试插入到您的可执行文件中:

  • 堆损坏检查
  • 堆栈损坏检查
  • 内存泄漏检查
  • 有些甚至更微妙,尤其是当您运行 CRT 时

它通过插入一个取代标准内存分配器库的自定义内存分配器库来实现。 您对 newdelete 的所有调用以及您所有的堆栈操作(进入/退出函数)都被监视...

是的,对于性能分析,不要遇到 VS 调试器。

如果您想展开代码中发生的事情,可以在这里查看答案:
Is there a good Valgrind substitute for Windows?

特别是第二个答案有有趣的指针。 建议的工具之一非常有用:http://www.codersnotes.com/sleepy

关于c++ - 为什么将可视化调试器附加到我的程序比直接从 visual studio 运行它更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17194127/

相关文章:

java - 如何向所有 Google App Engine 实例广播数据?

mysql - 在 mysql 中,NOT EXISTS 函数的性能比 UNION 高得多吗?

c++ - 将编译器从 gcc 切换到 msvc 后,Qt 应用程序在退出时崩溃

c++ - 在多个 VCL 模块中使用命名空间

c++ - 如何使用不同的 IDE 在不同的目录中 #include 文件?

sql-server - 内联 SQL 与存储过程

visual-studio-2012 - 项目的目标框架未安装或作为 Visual Studio future 更新的一部分包含在内

c# - 使用集合时如何删除ListView中的元素?

c++ - 是否有任何方法或宏来模拟语法 "if(a <= b < c <= ...)"来替换 "if(a<=b && b < c && c <= ...)"?

c++ - 错误 LNK2019 : unresolved external symbol "__declspec(dllimport) private