Visual Studio 2008 - 尝试减小C++调试编译中的内存分配大小
visual studio 2008 - Trying to reduce size of memory allocations in debug compilations for C++
我有一个在调试模式下编译的软件,以便于支持(获取转储文件等)。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 会导致一系列编译错误,但创建自己的新内容的要求在这里无关紧要,我在那里找不到解决方案。
我在帖子中看到的另一种选择是玩_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++编译大型结构时内存使用过多
- 查找编译时构造类的内存位置
- 为什么在编译时需要知道对象的内存配置文件以进行堆栈放置?
- 有什么需要,局部静态变量在编译时分配内存?
- 编译时收到未初始化的内存警告
- 当我用clang编译代码时,GCOV会出现内存错误
- GCC 需要大量内存来编译堆栈上具有非常大对象的 C++ 文件
- 在编译时检查特征类型保存的数据在内存中是否连续
- 如果使用 PHP 运行编译,则无法分配内存
- 编译时内存的内联分配
- 编译哈希算法时出现内存访问冲突错误
- 如何使用任意数量的(编译时间确定的)容器创建一个内存池
- 在内存使用或编译时间方面更好的是什么
- 对于使用Cygwin GCC编译的C++程序,是否有免费的内存调试器
- 共享内存原子为sm_20编译,但不为sm_13编译
- C++:这个代码有什么问题吗?它编译得很好,但人们告诉我会有内存泄漏
- 当我的代码由 GCC 编译时内存泄漏
- 在编译时分配内存的工厂模式,以及如何打印编译时信息
- 编译时间和内存 大型C++项目的使用情况?
- Visual Studio 在 vmware 中使用 gcc/gdb 交叉编译 - >内存访问错误