1. availspace < chunk_size + sizeof(MemoryChunk)
若用户下发的待分配内存空间大小 size < set->allocChunkLimit; 但 set 中 availspace < chunk_size + sizeof(MemoryChunk) 时,我们则需要重新向 OS malloc 一个block,同时将 set 中的 availspace 空间地址分配给 set->freelist[]。
1.1 block->endptr - block->freeptr 初始化给 set->freelist[]
该过程由函数 AllocSetAllocFromNewBlock() 完成。 该函数实现过程如下:
-
函数参数
- context: 内存上下文
- size: 请求的内存大小
- flags: 分配标志
- fidx: 空闲列表索引
-
主要逻辑
a) 处理当前块的剩余空间:- 检查当前活动块是否有足够空间(availspace)
- 如果不足,将剩余空间分割成合适大小的 chunk 并放入空闲列表
- 使用循环确保所有剩余空