📖 第 35 章:内存管理实验(Memory Management)

🔧 正点原子《DMF407 开发指南》V1.0 · Chapter 35
🗨️ 「malloc/free 在 MCU 上也能用:内存管理。」
这一章在干嘛? 内存管理实验:分块管理(malloc/free)、内存池、碎片处理。从此在 MCU 上用 malloc 也能稳定运行。
35.1 内存管理简介35.2 硬件设计35.3 程序设计35.4 下载验证

35.1 内存管理简介

STM32 内存有限(192 KB SRAM),malloc/free 容易碎片化。

三种内存管理方法:

  1. 静态数组:预先分配固定 buffer,最稳;
  2. 动态 malloc:C 库自带,可能碎片;
  3. 内存池:固定大小块池,无碎片,效率高。

正点原子提供 mymalloc / myfree 内存管理:基于分块 + 链表。管理 32 KB SRAM。

原书图 35.1.1:内存池块链表结构
原书图 35.1.1:内存池块链表结构

选哪种:RTOS 用系统自带;裸机且分配频繁用内存池;偶尔分配用 malloc。

35.2 硬件设计

本实验纯软件,串口输出调试信息。

35.3 程序设计

35.3.1 API

void mymem_init(uint8_t size);          // size 单位 KB
void *mymalloc(uint32_t size);          // 字节
void *myrealloc(void *ptr, uint32_t size);
void myfree(void *ptr);

35.3.2 关键代码

mymem_init(32);                         // 初始化 32 KB 内存池

uint8_t *p = (uint8_t *)mymalloc(1024);
if (p) {
    sprintf((char *)p, "Hello, Memory Pool!");
    printf("%s\n", p);
    myfree(p);
}

原书图 35.3.2.1:mymalloc 流程图
原书图 35.3.2.1:mymalloc 流程图

原书图 35.3.2.2:内存碎片示意
原书图 35.3.2.2:内存碎片示意

35.4 下载验证

申请 256 字节 → 写入 → 释放;多次循环无内存泄漏。

避免内存泄漏:申请完一定释放;不使用裸 malloc,改用 mymalloc 便于监控剩余空间。

🧠 小测验
三种内存管理方法?
静态数组、动态 malloc、内存池。
内存池的优势?
无碎片、分配 O(1)、适合嵌入式。
mymalloc 单位?
字节。
← 上一篇🏠 顶层目录下一篇 →