我正在用C语言编写使用ARM体系结构的设备.我想检查我的应用程序中的内存泄漏.正如在我的设备中,iam工作(ARM体系结构)不支持Valgrind ..所以我可以使用其他选项来检查我的应用程序中的内存泄漏.有没有办法检查内存泄漏……或者请指导我在编写代码时必须采取的预防措施,以避免内存泄漏,尤其是在处理字符串和动态内存分配时…?
平台:Linux,gcc编译器
解决方法
不要使用动态内存分配.至少我们不在航空电子系统中.
我通常使用其中之一
> malloc仅在初始化时所需的内存.
如果失败则应用程序需要更多内存.这用于驱动程序需要跟踪N个对象但需要根据项目/应用程序配置N的情况.
在操作系统上,我使用最大内存值提供给应用程序的操作系统.
>使用免费和已用项目的链接列表
如果项目具有固定大小,则效果最佳.然后在初始化时,驱动程序读取确定它将支持的最大项目的配置项.这可以是来自内核空间的malloc.如果内存不足,则需要正确指定系统资源.
>使用应用程序可以分配的内存池,但仅作为整体删除.
在用于航空电子设备的嵌入式OpenGL系统中,我们允许应用程序创建可变大小的对象.池耗尽后,我们返回OUT_OF_MEMORY错误.我们不允许应用程序随机删除对象,因为这会导致内存碎片和非确定性运行时行为.我们允许他们删除每个对象并根据需要重新创建它们.这具有确定性行为.
根据系统的需要,一切都有某种约束或限制.这也适用于字符串数据.