更新时间:2021-07-08 GMT+08:00
分享

内存备份机制

使用场景

业务代码中出现踩内存、释放野指针问题,通过异常dump信息较难定位内存非法操作的位置。

功能说明

备份动态内存节点控制头信息:在前一内存节点控制头中备份当前节点控制头信息。在内存申请和释放操作中增加对当前节点的控制头信息与备份信息的检测,在节点控制头被踩而备份信息未踩时,输出节点控制头备份信息及被踩节点前一内存节点信息,用于进一步分析是否为越界踩内存问题。在释放野指针时可及时输出提示信息和调用栈信息,快速定位释放野指针的位置。

使用方法

通过make menuconfig打开内存备份机制:

  • 目前只有bestfit内存管理算法支持该功能,需要使能LOSCFG_KERNEL_MEM_BESTFIT:
    Kernel ---> Memory Management ---> Dynamic Memory Management Algorithm ---> bestfit
  • 同时该功能依赖于LOSCFG_MEM_HEAD_BACKUP,该宏开关可以通过在菜单项中开启“Enable Node Head Backup”使能:
    Debug  ---> Enable a Debug Version ---> Enable MEM Debug ---> Enable Node Head Backup

注意事项

该功能开启后会增加系统内存占用(占用大小=节点个数*节点控制头大小),且影响内存操作性能。建议仅在问题检测时开启,默认关闭。

相关文档