ptmalloc2和STL 内存池

一、内存管理的基本单位:chunk、 bin 与 arena

chunk​ 是 ptmalloc2 管理内存的最小单位。用户拿到 malloc 返回的指针,只是 chunk 中”用户数据区”的起始地址;在它前面还有一段元数据头部,存放了本块大小、前一 chunk 是否在使用中(PREV_INUSE)、是否 mmap 而来(IS_MMAPPED)、是否属于非主 arena(NON_MAIN_ARENA)等标志。

chunk 的大小在 64 位机上按 16 字节对齐,最小 chunk 通常为 32 字节。这些标志位藏在 size 字段的低 3 比特里,所以整个分配器对元数据的操作都是”就地(in-place)”的——这也是为什么堆溢出能直接覆写相邻 chunk 的元数据。

赞(0)
未经允许不得转载:小狮博客 » ptmalloc2和STL 内存池
分享到: 更多 (0)

联系我们