Memory leaks 检查运行时内存使用/消耗Ada95?

Memory leaks 检查运行时内存使用/消耗Ada95?,memory-leaks,ada,Memory Leaks,Ada,G'day,我正在寻找某种工具或库,我可以使用Ada95来检查或报告当前运行时内存的使用情况 到目前为止,我运气不太好。我在这里是因为也许社区中有一个人遇到了这样的挑战,你可以有一个很好的方法来隔离Ada不断增长的内存使用。有点背景 程序相当稳定。就我所见,95%以上的用户使用固定数组和固定字符串,到目前为止没有显式内存分配(使用grep搜索) 我正在为打开/关闭文件输入日志消息。目前还不清楚还有什么可能消耗内存。是否有任何东西或库可以帮助跟踪此WAMPU 理想的情况下,一些可以“仪器”Ada将

G'day,我正在寻找某种工具或库,我可以使用Ada95来检查或报告当前运行时内存的使用情况

到目前为止,我运气不太好。我在这里是因为也许社区中有一个人遇到了这样的挑战,你可以有一个很好的方法来隔离Ada不断增长的内存使用。有点背景

程序相当稳定。就我所见,95%以上的用户使用固定数组和固定字符串,到目前为止没有显式内存分配(使用grep搜索)

我正在为打开/关闭文件输入日志消息。目前还不清楚还有什么可能消耗内存。是否有任何东西或库可以帮助跟踪此WAMPU


理想的情况下,一些可以“仪器”Ada将是可爱的。你可以用C/C++来买这些玩具——对Ada有什么想法吗?非常感谢。关于这一点,有很多可能的答案。像gnatmem这样的工具可以为您提供一些信息,但我相信只有在您的程序终止之后。像valgrind(linux上)这样的工具也有类似的功能

如果只想监视由Ada代码分配的内存,一种方法是替换System.memory中的实现。GNATComponents集合(GNATCOLL)在GNATCOLL.Memory中有一个这样的包


我们最近在GNATCOLL.Memory的开发版本中添加了一些系统调用绑定,允许您通过应用程序(任何语言,而不仅仅是Ada)获取有关驻留内存使用情况的信息。这与GNATCOLL.Traces集成在一起,因此您的日志文件可以自动包含此类信息。基于的C代码来自,我们在其中添加了一个带有pragma Import的简单Ada绑定。

关于这一点,有很多可能的答案。像gnatmem这样的工具可以为您提供一些信息,但我相信只有在您的程序终止之后。像valgrind(linux上)这样的工具也有类似的功能

如果只想监视由Ada代码分配的内存,一种方法是替换System.memory中的实现。GNATComponents集合(GNATCOLL)在GNATCOLL.Memory中有一个这样的包


我们最近在GNATCOLL.Memory的开发版本中添加了一些系统调用绑定,允许您通过应用程序(任何语言,而不仅仅是Ada)获取有关驻留内存使用情况的信息。这与GNATCOLL.Traces集成在一起,因此您的日志文件可以自动包含此类信息。它所基于的C代码来自,我们在其中添加了一个简单的带有pragma Import的Ada绑定。

我过去在valgrind方面取得了成功。基本上,忘记这是Ada,像往常一样使用调试信息和内存泄漏配置文件进行编译。Ada运行时将有一些不重要、不增长的代码,希望您的代码会变得明显

还可以使用Gnat的Debug_池来使用动态分配。但不能与valgrind一起使用,因为内存没有被释放,它被保留用于诊断(或者多年前的情况)


你可能没有那么明显的内存泄漏:在任务类型“终止”之前释放它是我现在唯一能想到的方法。

我过去在valgrind方面取得过成功。基本上,忘记这是Ada,像往常一样使用调试信息和内存泄漏配置文件进行编译。Ada运行时将有一些不重要、不增长的代码,希望您的代码会变得明显

还可以使用Gnat的Debug_池来使用动态分配。但不能与valgrind一起使用,因为内存没有被释放,它被保留用于诊断(或者多年前的情况)


内存泄漏可能不太明显:在任务类型“终止”之前释放它是我目前唯一能想到的方法。

顺便说一句,内存使用中可能缺少的一个是返回无约束数据类型(例如类范围对象数组)的函数,在所谓的辅助堆栈中为其分配内存。顺便说一句,您可能缺少的内存使用之一是返回无约束数据类型(例如类范围对象数组)的函数,内存在所谓的辅助堆栈中分配。