【LVGL v8.3】切换界面时内存变化分析

2024-06-15 22:36

本文主要是介绍【LVGL v8.3】切换界面时内存变化分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 前言
  • 实现
  • 分析

前言

切换界面需要释放当前控件,否则控件一直存在,同时反复创建会导致内存泄漏

实现

数据结构

static struct
{lv_obj_t *screen;bool screen_del;lv_obj_t *screen_img_bg;
}ui;

创建界面

void setup_scr_ext(void)
{//Write codes screenui.screen = lv_obj_create(NULL);lv_obj_set_size(ui.screen, 800, 480);lv_obj_set_scrollbar_mode(ui.screen, LV_SCROLLBAR_MODE_OFF);//Write codes screen_img_bgui.screen_img_bg = lv_img_create(ui.screen);lv_obj_add_flag(ui.screen_img_bg, LV_OBJ_FLAG_CLICKABLE);lv_img_set_src(ui.screen_img_bg, &_02_alpha_800x480);lv_img_set_pivot(ui.screen_img_bg, 50,50);lv_img_set_angle(ui.screen_img_bg, 0);lv_obj_set_pos(ui.screen_img_bg, 0, 0);lv_obj_set_size(ui.screen_img_bg, 800, 480);lv_obj_add_flag(ui.screen_img_bg, LV_OBJ_FLAG_HIDDEN);//Write style for screen_img_bg, Part: LV_PART_MAIN, State: LV_STATE_DEFAULT.lv_obj_set_style_img_opa(ui.screen_img_bg, 255, LV_PART_MAIN|LV_STATE_DEFAULT);//Update current screen layout.lv_obj_update_layout(ui.screen);lv_scr_load_anim(ui.screen, LV_SCR_LOAD_ANIM_NONE, 100, 100, true);
}

删除界面

void scr_ext_del(void)
{lv_obj_clean(ui.screen);
}

清空图片缓存

lv_img_cache_invalidate_src(NULL);

分析

原始内存

free
memheap           pool size  max used size available size
---------------- ---------- ------------- --------------
heap_cma         6291456    3090744       3200712
heap_sys         524472     39788         487048

创建界面

free
memheap           pool size  max used size available size
---------------- ---------- ------------- --------------
heap_cma         6291456    5754480       836560
heap_sys         524472     56972         480800

删除界面

free
memheap           pool size  max used size available size
---------------- ---------- ------------- --------------
heap_cma         6291456    5754480       836560
heap_sys         524472     56972         484736

释放缓存

free
memheap           pool size  max used size available size
---------------- ---------- ------------- --------------
heap_cma         6291456    5754480       3200712
heap_sys         524472     56972         486860

小结:主动释放缓存才会作用于 heap_cma;heap_sys 有损耗,需要检查

这篇关于【LVGL v8.3】切换界面时内存变化分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1064773

相关文章

Springboot中分析SQL性能的两种方式详解

《Springboot中分析SQL性能的两种方式详解》文章介绍了SQL性能分析的两种方式:MyBatis-Plus性能分析插件和p6spy框架,MyBatis-Plus插件配置简单,适用于开发和测试环... 目录SQL性能分析的两种方式:功能介绍实现方式:实现步骤:SQL性能分析的两种方式:功能介绍记录

golang内存对齐的项目实践

《golang内存对齐的项目实践》本文主要介绍了golang内存对齐的项目实践,内存对齐不仅有助于提高内存访问效率,还确保了与硬件接口的兼容性,是Go语言编程中不可忽视的重要优化手段,下面就来介绍一下... 目录一、结构体中的字段顺序与内存对齐二、内存对齐的原理与规则三、调整结构体字段顺序优化内存对齐四、内

最长公共子序列问题的深度分析与Java实现方式

《最长公共子序列问题的深度分析与Java实现方式》本文详细介绍了最长公共子序列(LCS)问题,包括其概念、暴力解法、动态规划解法,并提供了Java代码实现,暴力解法虽然简单,但在大数据处理中效率较低,... 目录最长公共子序列问题概述问题理解与示例分析暴力解法思路与示例代码动态规划解法DP 表的构建与意义动

C#使用DeepSeek API实现自然语言处理,文本分类和情感分析

《C#使用DeepSeekAPI实现自然语言处理,文本分类和情感分析》在C#中使用DeepSeekAPI可以实现多种功能,例如自然语言处理、文本分类、情感分析等,本文主要为大家介绍了具体实现步骤,... 目录准备工作文本生成文本分类问答系统代码生成翻译功能文本摘要文本校对图像描述生成总结在C#中使用Deep

Oracle数据库如何切换登录用户(system和sys)

《Oracle数据库如何切换登录用户(system和sys)》文章介绍了如何使用SQL*Plus工具登录Oracle数据库的system用户,包括打开登录入口、输入用户名和口令、以及切换到sys用户的... 目录打开登录入口登录system用户总结打开登录入口win+R打开运行对话框,输php入:sqlp

Linux内存泄露的原因排查和解决方案(内存管理方法)

《Linux内存泄露的原因排查和解决方案(内存管理方法)》文章主要介绍了运维团队在Linux处理LB服务内存暴涨、内存报警问题的过程,从发现问题、排查原因到制定解决方案,并从中学习了Linux内存管理... 目录一、问题二、排查过程三、解决方案四、内存管理方法1)linux内存寻址2)Linux分页机制3)

Java循环创建对象内存溢出的解决方法

《Java循环创建对象内存溢出的解决方法》在Java中,如果在循环中不当地创建大量对象而不及时释放内存,很容易导致内存溢出(OutOfMemoryError),所以本文给大家介绍了Java循环创建对象... 目录问题1. 解决方案2. 示例代码2.1 原始版本(可能导致内存溢出)2.2 修改后的版本问题在

大数据小内存排序问题如何巧妙解决

《大数据小内存排序问题如何巧妙解决》文章介绍了大数据小内存排序的三种方法:数据库排序、分治法和位图法,数据库排序简单但速度慢,对设备要求高;分治法高效但实现复杂;位图法可读性差,但存储空间受限... 目录三种方法:方法概要数据库排序(http://www.chinasem.cn对数据库设备要求较高)分治法(常

Redis多种内存淘汰策略及配置技巧分享

《Redis多种内存淘汰策略及配置技巧分享》本文介绍了Redis内存满时的淘汰机制,包括内存淘汰机制的概念,Redis提供的8种淘汰策略(如noeviction、volatile-lru等)及其适用场... 目录前言一、什么是 Redis 的内存淘汰机制?二、Redis 内存淘汰策略1. pythonnoe

Java内存泄漏问题的排查、优化与最佳实践

《Java内存泄漏问题的排查、优化与最佳实践》在Java开发中,内存泄漏是一个常见且令人头疼的问题,内存泄漏指的是程序在运行过程中,已经不再使用的对象没有被及时释放,从而导致内存占用不断增加,最终... 目录引言1. 什么是内存泄漏?常见的内存泄漏情况2. 如何排查 Java 中的内存泄漏?2.1 使用 J