当涉及非内存托管语言(如C、C++或Fortran (我的例子))时,跟踪内存分配/取消分配变得越来越困难,特别是当所有权必须共享时。我为我的对象实现了重新计算,但这使得它更加复杂,因为没有地方可以释放对象。每一个参考减量都是一个潜在的去分配点。
因此,现在我越来越难以追踪内存泄漏。我想知道一些已经建立起来的技术来处理非内存管理语言中的内存管理,除了验证您的方法之外。
编辑:我更感兴趣的是主动编程策略(这是通用的)。
发布于 2012-08-06 13:44:17
你已经报道过了。
如果共享所有权导致内存管理问题,则设计时不要使用共享所有权。通常,这涉及指定代码的一部分作为所有者,从而负责解除分配。弱指针(或等效指针)可以以编程方式帮助此操作。当单一所有权存在时,RAII可以更自由地应用。
如果您有重新计数(或另一种自动去分配机制),那么您不需要关心是否/在哪里发生了脱钩。您只需测试/证明结构将正确地释放内存时,它应该这样做。
还有几件事情需要关注:
发布于 2012-08-06 13:15:35
发布于 2012-08-06 19:26:03
我使用自己的包装器例程进行分配和取消分配,这要求每个块都由标识分配的字符串标识。例如,myAlloc(大小,“用于模糊排序的临时”)
在调试模式下,每个块都被添加到一个(可能很大的)哈希表中,在退出时,剩余的泄漏将与垃圾字符串一起报告。在非调试模式下,只进行摘要簿记。
从这个方案中,我得到了生产代码中的一条线索,警告了意外泄漏,并且在开发泄漏的内容时,我得到了详细的、即时的反馈。
https://softwareengineering.stackexchange.com/questions/159681
复制相似问题