跳转至

mem_check

mem_check 模块提供内存检查功能,用于调试时检测内存泄漏与越界访问。

Class Summary

OHOS::MemCheck

提供动态内存分配的统计与泄漏检查能力

  • 构造:无
  • 成员函数

    接口名称 功能简述
    GetInstance 获取 MemCheck 单例实例
    MemAdd 记录新增的动态内存分配信息
    MemDelete 移除已释放的动态内存记录
    DumpMemInfo 打印当前内存分配统计信息
    MemCheckInit 初始化内存检查模块
    EnableLeakCheck 启用或禁用内存泄漏检查功能
    Crash 设置内存泄漏崩溃触发的计数与大小条件
  • 使用包含头文件#include "gfx_utils/mem_check.h"

  • 声明头文件middleware/services/gui/uikit/proprietary/include/gfx_utils/mem_check.h
  • 公有运算符:无
  • 继承关系:无
  • 嵌套类型:无
  • 模板形参:无

Functions

OHOS::MemCheck

GetInstance

static MemCheck* GetInstance()

功能说明

  • 核心用途:获取 MemCheck 类的全局单例实例
  • 设计目的:确保全局仅存在一个内存检查对象,统一管理内存分配记录
  • 使用场景:在需要进行内存统计或泄漏检查时,通过该接口获取唯一操作入口

返回值

  • 返回类型:MemCheck*

返回 MemCheck 单例指针

返回值 触发场景
MemCheck* 始终返回静态单例实例地址

MemAdd

bool MemAdd(int size, uintptr_t address)

功能说明

  • 核心用途:记录一次动态内存分配信息(大小与地址)
  • 设计目的:在申请动态内存时调用,将分配信息链入内部记录链表,用于后续泄漏检测
  • 使用场景:动态内存申请(malloc/new)成功后立即调用,传入分配大小与地址

前置条件

  • 内存泄漏检查已通过 EnableLeakCheck(true) 启用
  • 传入的 address 为有效的内存分配地址

入参

名称 参数类型 详细说明 约束取值范围
size int 申请的内存大小(字节) 大于 0
address uintptr_t 申请的内存地址 有效的动态内存地址,非 0

返回值

  • 返回类型:bool

返回记录操作结果

返回值 触发场景
true(1) 内存分配信息记录成功
false(0) 未启用泄漏检查;或内部 malloc 分配节点失败

Kconfig 配置

配置项 说明 默认值
ENABLE_MEMORY_CHECK 启用内存检查功能,该宏未开启时整个 MemCheck 类不可用 n

MemDelete

bool MemDelete(uintptr_t address)

功能说明

  • 核心用途:从内存记录链表中移除指定地址的分配记录
  • 设计目的:在释放动态内存时调用,将对应分配记录从链表中删除,标记该内存已释放
  • 使用场景:动态内存释放(free/delete)时调用,传入待释放的内存地址

前置条件

  • 内存泄漏检查已通过 EnableLeakCheck(true) 启用
  • 传入的 address 为之前通过 MemAdd 记录的有效地址

入参

名称 参数类型 详细说明 约束取值范围
address uintptr_t 待释放的内存地址 有效的动态内存地址,非 0

返回值

  • 返回类型:bool

返回删除操作结果

返回值 触发场景
true(1) 内存记录删除成功
false(0) 未启用泄漏检查;或传入地址为 0

Kconfig 配置

配置项 说明 默认值
ENABLE_MEMORY_CHECK 启用内存检查功能,该宏未开启时整个 MemCheck 类不可用 n

DumpMemInfo

void DumpMemInfo()

功能说明

  • 核心用途:打印当前动态内存分配的统计信息
  • 设计目的:输出当前内存分配总计数及底层图形内存引擎的内存使用详情
  • 使用场景:调试阶段查看内存使用状况,定位内存占用问题

Kconfig 配置

配置项 说明 默认值
ENABLE_MEMORY_CHECK 启用内存检查功能,该宏未开启时整个 MemCheck 类不可用 n

MemCheckInit

void MemCheckInit()

功能说明

  • 核心用途:初始化内存检查模块
  • 设计目的:在应用启动时调用,完成内存检查模块的初始化准备工作
  • 使用场景:应用创建阶段调用,确保内存检查功能就绪

Kconfig 配置

配置项 说明 默认值
ENABLE_MEMORY_CHECK 启用内存检查功能,该宏未开启时整个 MemCheck 类不可用 n

EnableLeakCheck

void EnableLeakCheck(bool enable)

功能说明

  • 核心用途:启用或禁用内存泄漏检查功能
  • 设计目的:开启时初始化内部记录链表并开始追踪内存分配,关闭时输出泄漏汇总并清理记录
  • 使用场景:在需要检测内存泄漏的代码段前开启,代码段结束后关闭并查看泄漏报告

入参

名称 参数类型 详细说明 约束取值范围
enable bool 是否启用内存泄漏检查 true:启用;false:禁用

Kconfig 配置

配置项 说明 默认值
ENABLE_MEMORY_CHECK 启用内存检查功能,该宏未开启时整个 MemCheck 类不可用 n

Crash

void Crash(int16_t cnt, int32_t sz)

功能说明

  • 核心用途:设置内存泄漏崩溃触发的计数与大小条件
  • 设计目的:当泄漏记录计数达到指定值且对应大小匹配时,触发系统崩溃以便调试定位
  • 使用场景:调试内存泄漏时,设定特定泄漏条件触发崩溃断点以捕获调用栈

入参

名称 参数类型 详细说明 约束取值范围
cnt int16_t 触发崩溃的泄漏计数阈值 -1 表示不触发;大于等于 0 时在第 cnt 次泄漏分配时触发
sz int32_t 触发崩溃时预期匹配的分配大小(字节) 与实际分配大小一致时触发;0 表示不校验大小

Kconfig 配置

配置项 说明 默认值
ENABLE_MEMORY_CHECK 启用内存检查功能,该宏未开启时整个 MemCheck 类不可用 n

Structures

MemAllocInfo

struct MemAllocInfo {
    uintptr_t address;
    int32_t size;
    int16_t count;
    struct MemAllocInfo* next;
};

成员说明

成员名称 数据类型 描述
address uintptr_t 内存分配地址
size int32_t 内存分配大小(字节)
count int16_t 内存分配序号计数
next struct MemAllocInfo* 指向下一个分配记录节点的指针