目录
- tcacheAllocateSmall()
- tcacheAllocateNormal()
- newChunk()
- allocateHuge()
- newUnpooledChunk()
PoolArena根据请求大大小主要分配三中类型的内存,小于28KB的分配PoolSubpage,28KB~4MB的分配池化的PoolChunk,4MB以上的分配非池化的内存。
tcacheAllocateSmall()
如果请求的内存空间小于28KB则分配small类型的空间,即PoolSubpage.
tcacheAllocateNormal()
如果请求的大小在28KB~4MB之间则分配normal类型的空间,即池化的PoolChunk,采用二分查找的方式从PoolArena的5个利用率不同的list中选取chunk,如果5个list中都无法获得PoolChunk则创建新的chunk,创建成功后分配空间给buf,保存在qInit链表中。
newChunk()
allocateHuge()
当请求的空间大小大于4MB的时候分配的是非池化的chunk,这种chunk使用结束后直接释放.
newUnpooledChunk()
非池化的chunk创建过程与池化的chunk一致,只是不需要传入pageSize、pageShifts、chunkSize等切段使用的参数,因为它只分配一次,使用完毕后会直接释放。
至此,PoolArena的内存分配分析完毕,感谢阅读。
全文完,如果觉得文章有点意思,不妨点个“赞”或者“在看”吧,您的每一份正反馈都是对三横兰写作的最大肯定,感谢阅读_
每天坚持一点点,每天进步一点点
坚持是日复一日,质变需日积月累
我是三横兰,那个三横的兰