内存管理–GNU2.9::alloc

  • 非标准版的分配器, 标准版分配器 std::allocator, 本质是直接调用 new 和 delete, 不进行任何优化

实现细节

  • 内部维护16个链表, 分别对应 n 个字节 的请求

  • 每次申请内存时, 申请20 个装入对应的链表中, 再额外申请 20 个对应大小 + 增长大小放入缓冲池

    增长大小会最后将申请内存对齐成 16 的倍数

  • 当申请新链表时, 先从缓冲池内分配内存, 当缓冲池的内存不足一个申请单位的时候,

    将剩余内存放入对应的链表中, 再重新按照上一步申请内存

  • 当可用内存不足(即无法再分配足够内存)时, 优先向比申请内存大的链表中取单个节点内存给调用者

    如果缓冲池中有内存碎片,同上一步相同, 放入对应链表中后再进行操作

  • 当比申请内存大的链表中找不到空闲的节点内存可供分配时, 返回分配内存失败

    • 不会将申请内存细分, 为了其他程序考虑
    • 不会将其他小的内存链表中取多个节点拼凑, 技术难度太大