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