社区新人的RT-Thread学习笔记8——内存管理
前言 本文讲RT-Thread的内存管理,包括为何不使用C标准库的内存管理函数、内存管理的特点、RT-Thread 程序内存分布、内存堆管理、内存池管理以及使用STM32进行实验。 一、不直接使用 C 标准库中的内存管理函数的原因 很多人会有疑问,为什么不直接使用 C 标准库中的内存管理函数呢?在电脑中我们可以用 malloc() 和 free() 这两个函数动态的分配内存和释放内存。但是,在嵌入式实时操作系统中,调用 malloc() 和 free() 却是危险的,原因有以下几点: 1、这些函数在小型嵌入式系统中并不总是可用的,小型嵌入式设备中的 RAM 不足。 2、它们的实现可能非常的大,占据了相当大的一块代码空间。 3、他们几乎都不是线程安全的。 4、它们并不是确定的,每次调用这些函数执行的时间可能都不一样。 5、它们有可能产生碎片。 6、这两个函数会使得链接器配置得复杂。 7、如果允许堆空间的生长方向覆盖其他变量占据的内存,它们会成为 debug 的灾难 。 二、内存管理的功能特点 1、分配内存的时间必须是确定的。一般内存管理算法是根据需要存储的数据的长度在内存中去寻找一个与这段数据相适应的空闲内存块,然后将数据存储在里面。而寻找这样一个空闲内存块所耗费的时间是不确定的,因此对于实时系统来说,这就是不可接受的, 实时系统必须要保证内存块的分配过程在可预测的确定时间内完成