gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:50:00 25 4
gpt4 key购买 nike

我有一个在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com