这个页面的 最新开发版本 可能比这个发布的 0.4.2 版本新。

堆内存管理

概述

堆(Heap)是动态分配内存的区域,用于存储程序运行时动态分配的内存空间。

堆内存

栈 (stack) 和堆 (heap) 的区别

WM IoT SDK 应用程序使用常见的计算机架构模式:由程序控制流动态分配的内存(即 )、由函数调用动态分配的内存(即 )以及在编译时分配的 静态内存

由于 WM IoT SDK 是一个多线程 RTOS 环境,因此每个 RTOS 任务都有自己的栈,这些栈默认在创建任务时从堆中分配。

多数情况下,可直接使用 C 标准函数库中的 malloc()free() 函数实现堆分配。为充分利用各种内存类型及其特性,WM IoT SDK 还具有基于内存属性的堆内存分配器。 分配具有特定属性的内存,可使用

wm_heap_caps_alloc()

内存属性

W800 包含多种类型的 RAM:

  • SRAM

  • DRAM

  • PSRAM

要获取所有 RAM 堆的剩余空间大小,请调用:

wm_heap_get_free_heap_size()

调用 malloc() 时,WM IoT SDK 内部调用 wm_heap_caps_alloc 函数,使用属性 WM_HEAP_CAP_DEFAULT 分配内存。 内存重新分配调用 wm_heap_caps_realloc 函数。 分配的内存可以通过调用 wm_heap_caps_free 函数释放。显示堆内存统计信息可以调用 wm_heap_print_stats 函数。 调试时,显示堆内存分配信息调用 wm_heap_print_tracing 函数。 当前所有从堆内存分配的内存,都为 8 字节对齐。

RAM 的使用