在 aix v5.3 中使用 mallocdebug 隔离并解决内存泄漏

在 aix v5.3 中使用 mallocdebug 隔离并解决内存泄漏

ID:21246965

大小:63.50 KB

页数:5页

时间:2018-10-20

在 aix v5.3 中使用 mallocdebug 隔离并解决内存泄漏_第1页
在 aix v5.3 中使用 mallocdebug 隔离并解决内存泄漏_第2页
在 aix v5.3 中使用 mallocdebug 隔离并解决内存泄漏_第3页
在 aix v5.3 中使用 mallocdebug 隔离并解决内存泄漏_第4页
在 aix v5.3 中使用 mallocdebug 隔离并解决内存泄漏_第5页
资源描述:

《在 aix v5.3 中使用 mallocdebug 隔离并解决内存泄漏》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、在AIXV5.3中使用MALLOCDEBUG隔离并解决内存泄漏  本文示例源代码或素材下载  AIX®Version5.3中附带的malloc子系统监视工具MALLOCDEBUG,可以帮助您隔离内存泄漏。内存泄漏是非常棘手的问题,并且处理起来需要很大的代价,所以使用好的工具以确定并了解出现泄漏的原因是非常重要的。本文中提供的示例代码将向您展示处理内存泄漏的一种方法。  引言  在编写应用程序时进行动态内存分配是非常必要的。它可以在程序运行的过程中帮助分配所需的内存,而不是在进程启动的时候就进行分配。然而,有效地管理这些

2、内存同样也是非常重要的。在大型的、复杂的应用程序中,内存泄漏是很常见的问题。当以前分配的一片内存不再需要使用或无法访问时,但是却并没有释放它,那么对于该进程来说,会因此导致总的可用内存的减少,这时就出现了内存泄漏。尽管优秀的编程实践可以确保最少的泄漏,但是根据经验,当使用大量的函数对相同的内存块进行处理时,很可能会出现内存泄漏。尤其是在碰到错误路径的情况下更是如此。  本文介绍了一种内存泄漏处理方法,并讨论了如何利用AIX®中附带的MALLOCDEBUG工具。  为什么内存泄漏难以解决  应用程序可以根据所碰到的具体情

3、况,在其生命周期中的不同时刻释放一片内存。编程人员需要对应用程序进行合理的设计,以便它能够知道何时可以释放一块内存,并马上执行这个操作,而不是等待更长的时间。根据具体的控制流程,可以在代码中的不同地方进行内存的释放。有一点至关重要,那就是必须涉及到所有的控制流程,而不仅仅是最常执行的代码流程路径。  同时,在内存做好释放准备之前对其进行释放可能引起灾难性的错误。因此,要了解内存块在何处做好了释放的准备,必须全面地了解应用程序中的控制流程。  检测内存泄漏  当出现下列症状时,表示可能出现了泄漏:  malloc返回的errno

4、被设置为ENOMEM。  发生核心转储,并且堆栈中的一个函数来自于malloc子系统。  在进行核心转储时,进程的大小比正常运行时要大。  进程大小(可以使用ps命令来查看)急剧增长。  如果出现了一些内存泄漏的症状,那么最好使用内存监视工具进行分析。有许多第三方的工具,如Zerofault和IBMRational®Purify®,但本文将讨论AIX中附带的MALLOCDEBUG工具。  使用MALLOCDEBUG报告内存泄漏  MALLOCDEBUG是一种很易于使用的malloc子系统监视工具。通过使用两个环

5、境变量MALLOCDEBUG和MALLOCTYPE,您可以轻松地对特定的应用程序启用malloc子系统调试任务。您需要将这些变量导出到运行该应用程序的Shell中。在AIXVersion5.3中,错误报告将写入到stderr。  MALLOCTYPE  MALLOCTYPE变量用来确定应该使用何种malloc子系统,以及是否启用调试任务。下面的表1显示了MALLOCTYPE各种可能的取值。请参见参考资料部分,其中提供了DevelopingandPortingCandC++ApplicationsonAIX的链接。IBM红皮书。

6、  表1.MALLOCTYPE变量MALLOCTYPE=内存分配器IBM红皮书“DevelopingandPortingCandC++ApplicationsonAIX”中的详细解释3.13.1内存分配器4.2.1节,3.1内存分配器NULL缺省内存分配器4.2.2节,缺省内存分配器buckets具有malloc桶扩展的缺省内存分配器4.2.3节,具有malloc桶扩展的缺省内存分配器debug调试内存分配器4.2.4节,调试内存分配器user:archive_name用户定义的内存分配器4.2.5节,用户定义的内存分配器  

7、您应该清楚,MALLOCDEBUG假定使用的是缺省分配器。  MALLOCDEBUG  MALLOCDEBUG变量可以包含下面表2的列表中的多个值,这些值之间以逗号分隔。  表2.MALLOCDEBUG变量MALLOCDEBUG=简要解释Align:nn是内存对齐的数值。关于更多的信息,请参见参考资料部分。postfree_checkingpostfree_checking使得MALLOCDEBUG报告对已释放的内存进行访问的尝试,然后中止该程序。validate_ptrs如果向free()调用传递的指针并不是以前由mallo

8、c分配的,那么将会引发一个错误消息,而该程序将被中止。override_signal_handling当MALLOCDEBUG检测到内存错误,它会强迫该程序使用SIGSEGV或SIGABRT进行核心转储。设置override_signal_handling可以确保该程序终止并

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。