Advertisement

单片机的内存管理基于链表

阅读量:

程序在运行过程中,有时需要较大的临时存储空间来存放部分变量。若在初始化阶段就预先分配一个庞大的数组区域,可能会导致内存资源的浪费。因为可能在很长一段时间内,程序并不需要如此大的内存容量,这便引发了一个矛盾:若不预先分配足够的空间,在实际使用时可能面临内存不足的问题;而若提前分配,则可能导致某些功能模块不得不被舍弃。

动态内存管理技术正是在这种需求背景下应运而生。首先了解一下编译器在编译阶段对内存的划分方式,通常编译器会将内存划分为栈区、堆区、BSS区、全局初始化变量区以及代码区等几个部分。其中只有堆区具备动态管理的特性,即程序可以在运行时根据需要申请或释放相应的内存空间。关于具体的内存分布及其各自的特点,可以参考我的另一篇博客文章,在此不再详细展开。

今天我将重点介绍与单片机相关的动态内存管理技术。对于许多单片机开发者而言,或许一生都难以真正接触到动态内存的应用场景。原因在于单片机的可用内存非常有限,通常仅有几KB的容量。在这种情况下进行复杂的内存管理是否具有实际意义?对于这一问题,我暂且不作深入讨论,本文仅作为技术展示之用,并不涉及观点争辩(~ ̄▽ ̄~)。

接下来我将逐步讲解如何实现单片机上的动态内存管理。首先说明实验环境:我使用的是Keil 5.21版本开发工具,并已在STM32F103V8T6和MB9AF314N两款芯片上验证过该代码。因此该代码适用于Cortex-M3

全部评论 (0)

还没有任何评论哟~