内存碎片化(Memory Fragmentation)
描述HRTOS动态内存分配过程中由于分配与释放不均导致的内存碎片问题。
机制定义
内存碎片 = 外部碎片 + 内部碎片
产生过程
1. 任务动态申请不同大小内存
2. 不规则释放形成空洞
3. 连续空间被切割
4. 大块内存无法满足申请
碎片类型扩展
外部碎片
空闲内存被切割成不连续的小块,无法满足大块申请。
内部碎片
分配块大于实际需求,造成空间浪费。
演示代码
#include
void task_A(void)
{
void* p1 = os_malloc(64);
void* p2 = os_malloc(128);
os_free(p1); // 释放形成碎片
os_free(p2);
void* p3 = os_malloc(96); // 可能无法连续分配
}
void system_init(void)
{
os_mem_init();
os_task((unsigned int)task_A, 0, 3, 0);
}
void main(void)
{
system_init();
os_task_release(0);
while(1)
{
os_nop();
}
}
系统意义
内存碎片是嵌入式RTOS长期运行稳定性的关键问题,直接影响系统可用性与实时性。