gpt4 book ai didi

c - Pb 使用 nedflush 解决内存泄漏问题

转载 作者:行者123 更新时间:2023-11-30 15:42:02 26 4
gpt4 key购买 nike

我尝试使用 nedmalloc 的调试功能来查找代码中潜在的内存泄漏。因此,我激活了标志 ENABLE_LOGGINGNEDMALLOC_TESTLOGENTRY

在我的程序中,我只使用系统内存池。在程序的最后,我调用函数 neddestroysyspool 来刷新所有内存事件。

首先,我无法激活堆栈跟踪功能。当我更改此深度时,程序会在几次分配后崩溃。为了在 VS2010 下编译,我必须自己定义 DeinitSym 并调用 CloseHandle;我希望我做得对......但它不能正常工作。所以我不使用它。

所以我只是解析文件 nedmalloc.csv:我根据地址、分配的大小总和并减去地址中释放的大小对其进行排序。由于未知原因,对于几个大块(大小>400kb),分配时给出的大小是正确的,但空闲时给出的大小不同,高于分配的大小。例如,我分配了一个840352字节的 block ,但是当释放时,记录的大小是851932字节。正常吗?

有人对这个问题有答案或提示吗?

最佳答案

首先,我真的不会使用 nedmalloc 的日志记录工具来检测内存泄漏。 valgrind 是查找资源泄漏的一种非常优越的方法。我什至在 nedmalloc 中做了一个 hack,让它使用系统分配器而不是 dlmalloc 来精确地利用 valgrind。

其次,是的,堆栈回溯代码可能有点脆弱。如果我没记错的话,我做了一些顽皮的事情来获得相当高的性能,但代价是它不太好用。我会直言不讳地说,除了我之外几乎没有人使用过该代码路径,因此我从来没有太多理由正确调试它。它对于我的目的来说已经足够好了。

第三,对于较大的 block ,dlmalloc 会将分配(包括其簿记)四舍五入为 64Kb 倍数,因此预计 12 block 分配将变成 13 block 分配。

最后,作为 nedmalloc 的作者,我建议您不要在 Windows 7 或更高版本、任何具有 3.x 内核的 Linux 或过去三年中生产的任何 Mac OS X 上使用 nedmalloc。为什么?系统分配器可能已经足够好了,而且我个人已经有很多年不需要 nedmalloc 了,所以我坦率地承认代码有点腐烂。

希望有帮助。

尼尔

关于c - Pb 使用 nedflush 解决内存泄漏问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20355378/

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