joh*_*ohn 7 c embedded gcc memory-leaks memory-management
我正在用C语言编写使用ARM体系结构的设备.我想检查我的应用程序中的内存泄漏.正如在我的设备中,iam工作(ARM体系结构)不支持Valgrind ..所以我可以使用其他选项来检查我的应用程序中的内存泄漏.有没有办法检查内存泄漏...或者请指导我在编写代码时必须采取的预防措施,以避免内存泄漏,尤其是在处理字符串和动态内存分配时...?
平台:Linux,gcc编译器
Leo*_*Leo 10
Valgrind现在确实支持ARM(它甚至支持NEON SIMD指令).如果运行debian或ubuntu,你应该能够通过apt安装valgrind.您可能必须启用测试/不稳定存储库,但包存在.
或者你当然可以自己编译(我已经尝试过并且有效).
不要使用动态内存分配。至少我们在航空电子系统中不这样做。
我通常使用
仅在初始化时 malloc 所需的内存。
如果失败,则应用程序需要更多内存。这用于驱动程序需要跟踪 N 个对象但 N 需要针对每个项目/应用程序进行配置的情况。在操作系统上,我使用向应用程序的操作系统提供的最大内存值。
使用免费和已用项目的链接列表如果项目具有固定大小,则此方法效果最佳。然后在初始化时,驱动程序读取配置项来确定它将支持的最大项目。这可以从内核空间进行 malloc。如果没有足够的内存,则需要正确指定系统资源。
使用应用程序可以从中分配但只能整体删除的内存池。在航空电子设备的嵌入式 OpenGL 系统中,我们允许应用程序创建可变大小的对象。一旦池耗尽,我们就会返回 OUT_OF_MEMORY 错误。我们不允许应用程序随机删除对象,因为这会导致内存碎片和不确定的运行时行为。我们确实允许他们删除每个对象并根据需要重新创建它们。这具有确定性行为。
一切都有某种约束或限制,您需要根据系统的需求来确定。这也适用于字符串数据。