我有一个在调试模式下编译的软件,以便于支持(获取转储文件等)。 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:语法错误:缺少')'before'{' ....
在#define _AFX_NO_DEBUG_CRT causes a stream of compilation errors下报告的错误相同,但是创建自己的新错误的要求与此无关,我找不到解决方案。
我在帖子中看到的另一个替代方法是使用_CrtSetDbgFlag - 但这似乎只是为了避免将信息写入堆中 - 但仍然为它分配内存 - 这不是我们想要的。
有什么想法吗?
答案 0 :(得分:0)
#define _CRTDBG_MAP_ALLOC
从MSDN开始,#define语句将CRT堆函数的基本版本映射到相应的调试版本。通过包含crtdbg.h,可以将malloc和free函数映射到它们的调试版本_malloc_dbg和_free_dbg,它们可以跟踪内存分配和释放。这是你想要避免的。 此映射仅在调试版本中发生(其中定义了_DEBUG)。发布版本使用普通的malloc和free函数。
为了达到你的目的,
只是#undef _CRTDBG_MAP_ALLOC
。
转到Visual Studio项目设置 - >调试设置,转到C / C ++预处理器设置,在" Undefine Preprocessor Definitions"下面添加_CRTDBG_MAP_ALLOC
宏。设置。
你应该能够生成一个DEBUG可执行文件,它在运行时的内存分配过程中不会生成过来。