G' ,我正在寻找可以与Ada95一起使用的某种工具或库来检查或报告当前使用/正在使用的运行时内存。
到目前为止,我没有太多运气。我在这里是因为也许社区中的一个人有这样的挑战,你可以有一个很好的方法或方法来隔离与Ada不断增长的内存使用。一点背景......
该计划非常稳定。据我所知,95%+使用固定数组和固定字符串,到目前为止没有明确的内存分配(用grep搜索)。
我将日志消息放入打开/关闭文件中。此时尚不清楚还有什么可能消耗内存。有什么东西或图书馆可以帮助跟踪 wampus 吗?
理想情况下可以"仪器"阿达很可爱。您可以为C / C ++购买这些玩具 - 对于Ada来说,有什么想法吗? 非常感谢提前。
答案 0 :(得分:3)
对此有很多可能的答案。像gnatmem这样的工具可以给你一些信息,但是只有在你的程序终止之后,我相信。像valgrind(在linux上)这样的工具具有类似的功能。
如果您只想监视由Ada代码分配的内存,一种方法是替换System.Memory中的实现。 GNATComponents集合(GNATCOLL)在GNATCOLL.Memory中有一个这样的包。
我们最近在GNATCOLL.Memory的开发版本中添加了一些与系统调用的绑定,这些绑定允许您获取应用程序(任何语言,而不仅仅是Ada)的常驻内存使用情况信息。它与GNATCOLL.Traces集成,以便您的日志文件可以自动包含此类信息。它所基于的C代码来自http://NadeauSoftware.com/,我们使用pragma Import添加了一个简单的Ada绑定。
答案 1 :(得分:3)
过去我和valgrind一起取得了成功。基本上,忘记这是Ada,像往常一样使用调试信息和配置文件进行内存泄漏编译。 Ada运行时会有一些非重要的,不成长的,希望你的内容会变得明显。
还可以使用Gnat的Debug_Pool为您的类型使用动态分配。但是不能和valgrind一起使用,因为内存没有被释放,它被保留用于诊断(或者它曾经是几年前)。
你可能没有那么明显的内存泄漏:在任务类型被解除之前释放它是我能想到的唯一一个。