繁体   English   中英

如何在ARM体系结构上检查C应用程序中的内存泄漏

[英]How to check for memory leaks in a C application on ARM Architecture

我正在用C语言编写使用ARM体系结构的设备。 我想检查我的应用程序中的内存泄漏。 正如在我的设备中,iam工作(ARM体系结构)不支持Valgrind ..所以我可以使用其他选项来检查我的应用程序中的内存泄漏。 有没有办法检查内存泄漏...或者请指导我在编写代码时必须采取的预防措施,以避免内存泄漏,尤其是在处理字符串和动态内存分配时...?

平台:Linux,gcc编译器

Valgrind现在确实支持ARM(它甚至支持NEON SIMD指令)。 如果运行debian或ubuntu,你应该能够通过apt安装valgrind。 您可能必须启用测试/不稳定存储库,但包存在。

或者你当然可以自己编译(我已经尝试过并且有效)。

不要使用动态内存分配。 至少我们不在航空电子系统中。

我通常使用其中之一

  1. malloc仅在初始化时所需的内存。
    如果失败则应用程序需要更多内存。 这用于驱动程序需要跟踪N个对象但需要根据项目/应用程序配置N的情况。 在操作系统上,我使用最大内存值提供给应用程序的操作系统。

  2. 使用免费和已使用商品的链接列表如果商品尺寸固定,则效果最佳。 然后在初始化时,驱动程序读取一个配置项,以确定它将支持的最大项。 这可能是来自内核空间的malloc。 如果内存不足,则需要正确指定系统资源。

  3. 使用应用程序可以分配的内存池,但仅作为整体删除。 在用于航空电子设备的嵌入式OpenGL系统中,我们允许应用程序创建可变大小的对象。 池耗尽后,我们返回OUT_OF_MEMORY错误。 我们不允许应用程序随机删除对象,因为这会导致内存碎片和非确定性的运行时行为。 我们允许他们删除每个对象并根据需要重新创建它们。 这具有确定性行为。

根据系统的需要,一切都有某种约束或限制。 这也适用于字符串数据。

考虑在台式计算机上为ARM设备创建模拟器。 根据嵌入式应用程序的i / o的复杂性和复杂性,这可能从微不足道到极其困难。

也许在桌面上运行应用程序的一部分(例如主要模块)就足够了,以便valgrind可以在那里观察程序。 它也可以使gdb更容易使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM