10.4. 紧凑型内存池

10.4.1. 概述

PikaPython 内置了供小资源芯片使用的紧凑型内存池,默认不开启。

紧凑型内存池可以将内存碎片从通常的 20~30% 降低至 5% 以下。

【注意】 紧凑型内存池会降低运行速度。

10.4.2. 开启方式

【注意】 需要内核版本不低于 v1.9.0

10.4.2.1. 开启用户配置

参考 配置文档

10.4.2.2. 加入配置项

/* pika_config.h */
#define PIKA_POOL_ENABLE 1
#define PIKA_POOL_SIZE 0x1900

其中 PIKA_POOL_ENABLE 表示开启紧凑型内存池,PIKA_POOL_SIZE 表示内存池的大小,内存池从 heap 中预先申请内存,请确保 heap 能够申请到该大小。

参考 bsp/stm32g030c8/Booter/pika_config.h

10.4.2.3. 内存池初始化

pikaScriptInit() 或者 newRootObj() 之前初始化内存池。

mem_pool_init();

参考:bsp/stm32g030c8/Booter/main.c

10.4.3. 释放内存池

如果需要释放内存池,调用

mem_pool_deinit();

10.5. 打断脚本运行

调用 pks_vm_exit() 可以强制打断正在运行的脚本(在死循环中也可以打断),可以放在中断函数里。

[注意]

需要内核版本不低于 v1.11.0

打断运行的脚本之后,只是退出的 VM 的运行,根对象仍然可以继续使用,不会被释放,如果需要释放内存,则应对根对象执行 obj_deinit()