【发布时间】:2013-07-25 23:02:45
【问题描述】:
我觉得这必须是一个功能,但我的 Google-Fu 让我失望了。如果之前有人问过/回答过这个问题,我提前道歉,感觉很明显,但我找不到任何东西。
有没有办法将分配标记为故意泄漏?上下文是在程序初始化期间动态分配一次并在整个程序生命周期中使用的数据结构。没有真正的理由在程序终止之前释放所有分配的对象(为什么要清理房间,因为整个房子都有一个破坏球?),但它会导致 valgrind 的很多误报。
我知道我可以创建一个抑制文件,但感觉是手动的且不连贯。我更喜欢某种宏或其他源内注释,即有意永远不会释放此分配(例如类似于malloc(...) -> malloc_IGNORE_LEAK(...) 的东西)。 valgrind 是否以某种方式支持这一点?
如果不是,那么标记/跟踪故意“泄漏”的首选解决方案是什么?
【问题讨论】:
-
这个关于执行结束时释放内存的问题的答案总结了我对它的看法:stackoverflow.com/a/2213644/1609219
-
在这种情况下,我的意识形态正好相反。有问题的应用程序根本不是跨平台的(也不是试图跨平台的),它被设计为在相对高性能的机器上运行在 Unix 环境中。在现代语境中,这意味着虚拟内存。事实上,凯文的以下回答在这种情况下非常合适。这个问题不是“我应该释放程序生命周期内存”,而是“我打算让操作系统完成它的工作,我该如何告诉其他工具”
-
我理解你的问题,这就是为什么我没有发布作为答案,只是评论。话虽如此,它们仍然可以到达吗?或者,您能否存储指向所有已分配内容的指针,从而保持内存可访问,并使
--show-reachable=no可行。 -
使用
malloc确实很难避免泄漏,malloc本质上是不安全的。
标签: c memory-leaks annotations valgrind false-positive