内存分配函数malloc kmalloc vmalloc
malloc实现步骤:
1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。
2)空闲链表搜索:接下来,malloc 会在一个空闲内存块链表中搜索一个足够大的空闲块。这个链表通常由多个空闲块组成,每个块都记录了大小和指向下一个块的指针。
3)分裂或合并空闲块:如果找到的空闲块大小大于请求的大小,malloc 可能会将这个块分裂成两部分:一部分用于满足当前请求,另一部分保留在链表中以供未来使用。如果空闲块正好等于请求的大小,则直接使用该块。
4)更新元数据:在使用选定的空闲块之前,malloc 需要更新其元数据(如大小和下一个块的指针),以反映内存已经被分配的事实。这可能涉及到修改当前块的大小字段或设置一个特殊的标记来表示该块已被占用。
5)返回指针:malloc 返回指向已分配内存的指针给用户。
malloc主要涉及两个系统调用brk和mmap,当申请的内存大小小于128KB时,malloc 通常