首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在非内存管理语言中保存内存泄漏标签的策略

问在非内存管理语言中保存内存泄漏标签的策略
EN

Software Engineering用户
提问于 2012-08-06 13:13:24
回答 3查看 1.1K关注 0票数 3

当涉及非内存托管语言(如C、C++或Fortran (我的例子))时,跟踪内存分配/取消分配变得越来越困难,特别是当所有权必须共享时。我为我的对象实现了重新计算,但这使得它更加复杂,因为没有地方可以释放对象。每一个参考减量都是一个潜在的去分配点。

因此,现在我越来越难以追踪内存泄漏。我想知道一些已经建立起来的技术来处理非内存管理语言中的内存管理,除了验证您的方法之外。

编辑:我更感兴趣的是主动编程策略(这是通用的)。

EN

回答 3

Software Engineering用户

发布于 2012-08-06 13:44:17

你已经报道过了。

如果共享所有权导致内存管理问题,则设计时不要使用共享所有权。通常,这涉及指定代码的一部分作为所有者,从而负责解除分配。弱指针(或等效指针)可以以编程方式帮助此操作。当单一所有权存在时,RAII可以更自由地应用。

如果您有重新计数(或另一种自动去分配机制),那么您不需要关心是否/在哪里发生了脱钩。您只需测试/证明结构将正确地释放内存时,它应该这样做。

还有几件事情需要关注:

  • 内存管理喜欢模式。当您的代码遵循一致的模式时,就内存管理而言,它将具有一致的行为。当您确实检测到内存泄漏时,您可以将注意力集中在异常情况上,从而更容易找到它们。
  • 缩小你的范围。如果对象只存在于一个独立的范围内,那么就更容易解释所有权和它们的生存期。
  • 只分配你所需要的。比小范围更好的是没有范围。如果不需要分配内存(在合理的范围内),就不要分配内存。
票数 5
EN

Software Engineering用户

发布于 2012-08-06 13:15:35

工具是重要的

有不同的工具可以帮助你。就我个人而言,我在两年前就使用了目视检漏器,尽管当大块被泄露时,它会造成很大的延迟(它显示整个泄漏块的内容)。

如果您不想重新编译(正如视觉泄漏检测器所要求的那样),我建议使用WinDbg,它既强大又快速(尽管它并不像人们所希望的那样容易使用)。

下面是一些关于内存泄漏和内存管理的参考信息:

编码标准和模式

除了工具之外,我建议在coding standards and patterns上工作,以及在项目开发人员之间对代码进行同行评审。这可能有助于利用一些常见的方法来解决内存泄漏问题。

票数 4
EN

Software Engineering用户

发布于 2012-08-06 19:26:03

我使用自己的包装器例程进行分配和取消分配,这要求每个块都由标识分配的字符串标识。例如,myAlloc(大小,“用于模糊排序的临时”)

在调试模式下,每个块都被添加到一个(可能很大的)哈希表中,在退出时,剩余的泄漏将与垃圾字符串一起报告。在非调试模式下,只进行摘要簿记。

从这个方案中,我得到了生产代码中的一条线索,警告了意外泄漏,并且在开发泄漏的内容时,我得到了详细的、即时的反馈。

票数 0
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/159681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档