c++ - 尝试减少 C++ 调试编译中的内存分配大小

标签 c++ visual-studio-2008 crt

我有一个在 Debug模式下编译的软件,以便于支持(获取转储文件等)。 Visual Studio 版本是 2008。

我们注意到我们的内存分配因此承受了巨大的开销。在定义 DEBUG 时完成的每个内存分配(甚至是单个指针)都带有一个大 header ,用于标识分配文件、行等。

我们正在努力保持 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 ,但是创建您自己的新文件的要求在这里不相关,我在那里找不到解决方案。

我在帖子中看到的另一种选择是使用 _CrtSetDbgFlag - 但这似乎只是为了避免将信息写入堆 - 但仍为其分配内存 - 这不是我们想要的。

有什么想法吗?

最佳答案

#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++ 预处理器设置,在“未定义预处理器定义”设置下添加 _CRTDBG_MAP_ALLOC 宏。

您应该能够生成 DEBUG 可执行文件,该可执行文件不会在运行时的内存分配期间生成窃听。

关于c++ - 尝试减少 C++ 调试编译中的内存分配大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30886628/

相关文章:

c++ - 使用 g++ -c 和 g++ -fopenmp 生成文件

c - 在 C 中的复制字符串中获取空字符的最快方法

c++ - 使用 std::ostream 方法将格式化文本输出到 std::string 对象

c# - 添加 .dll 作为引用。无法理解错误消息

c++ - CRT 和 C++ 软件

c++ - 你如何在 C++ 中打开文件资源管理器对话框?

C++ TensorFlow SoftmaxCrossEntropWithLogits 返回(成本,梯度),如何访问成本?

c++ - boost spirit : Why does phrase_parse behave differently to parse when parsing eol?

visual-studio-2008 - VS2008远程连接Win Mobile 6.1设备

c++ - MATLAB 引擎 Windows 7 问题