C++的内存管理

2021-03-06 05:28

阅读:467

  • heap_alloc_new_group()

    1MB分为32个单元,每单元32KB的大小。然后每一个单元又分为8个page,每部分4KB——对应操作系统的page。而管理中心region一共有32个group,所以每一个group管理8x4KB的内存资源。

    从上面的代码中可以知道:一个group共有64个双向指针,这些指针所管理的内存按照16的倍数递增(即1st—16字节,2nd—32字节...64th—>=1024字节)。 因此一个group实际上可以管理的大小是16*(1 + 2 + ...+ 64) = 32KB + 512Bytes。符合最开始的设定。

    根据ioinit申请的内存大小110h,加上debug模块和cookie,再进行16字节的对齐。最后需要向每一个page申请130h字节的内存。最后还剩下ec0h = ff0h - 130h。那一个page便会被切割成为两部分——一部分是分配的130h内存,这一部分需要将130h改为131h代表脱离了SBH系统的控制分离出去。 另一部分是剩下的ec0h。双方的结构都是heap_alloc_dbg::struce _CrtMemBlockHeader并且都需要更新cookie。以后每一次分配都需要根据分配的size计算所挂的链表——如果该链表上没有区块,则向上移动直到最后一条链表上再分配。

    至此,malloc函数的整个分配过程基本结束了。


  • 评论


    亲,登录后才可以留言!