【发布时间】:2015-09-02 09:30:11
【问题描述】:
我有一个在调试模式下编译的软件,以便于支持(获取转储文件等)。 Visual Studio 版本是 2008。
我们注意到我们的内存分配因此遭受了巨大的开销。在定义 DEBUG 时完成的每个内存分配(甚至是单个指针)都带有一个大标题,用于标识分配文件、行等。
我们正努力保持在 DEBUG 中,同时减少开销。似乎定义 _AFX_NO_DEBUG_CRT 应该可以解决问题 - 但在项目级别或在我们的 stdafx.h 文件中定义它会导致一长串编译错误:
c:\program files (x86)\microsoft visual studio 9.0\vc\atlmfc\include\afxtls_.h(66):错误 C2059:语法错误:'__asm' c:\program files (x86)\microsoft visual studio 9.0\vc\atlmfc\include\afxtls_.h(66):错误 C2143:语法错误:在 '{' 之前缺少 ')' ....
同样报错:#define _AFX_NO_DEBUG_CRT causes a stream of compilation errors,但是这里不需要创建自己的new,我也没有找到解决办法。
我在帖子中看到的另一种选择是使用 _CrtSetDbgFlag - 但这似乎只是为了避免将信息写入堆 - 但仍为其分配内存 - 这不是我们想要的。
有什么想法吗?
【问题讨论】:
-
顺便说一句,我不明白你为什么不能使用发布版本。在项目设置中启用 PDB 生成(生成调试信息选项)。不要分发 PDB 文件。
-
这样就不用担心内存分配的问题了,release build中的一切都优化好了
-
感谢您的提示。至于另一篇文章 - 是的,这是同样的问题,但我没有尝试提供自己的 new 和 delete 的限制,只是想避免 CRT 块的开销 - 所以我希望也许有人可以提供帮助我(那里的答案都没有提供解决方案)。至于转向发布 - 这是我们试图避免的巨大变化(因为它会改变许多行为)并使其更难以调试。很高兴了解 PDB 生成选项。
标签: c++ visual-studio-2008 crt