在之前内存管理中,只是实现了页的申请,也就是说要申请内存,最小的单位也是1页即4k。
这节来实现不同规格的内存分配,当然还是在之前页的申请的基础上来完成。
1. arena
arena是提供内存分配的数据结构,包含两个部分,一部分是元信息,另一部分是内存块。
arena可以是一个页框,页可以是多个页框。对于小于1024字节的内存申请,arena就是一个页,在这一个页中除去元信息,剩下的空间就平均的分为各个内存块。
sys_malloc 最终申请的内存就是在arena中申请的。
/* arena 仓库元信息 */
struct arena{
struct mem_block_desc* desc; // 指向内存块描述符的指针
uint32_t cnt; // large为false时,指本arena中有多少空闲块;为true时指arena占几个页框
bool large;