概念

  • 内存碎片

    • 外部碎片

      • 描述 :还没有被分配出去,但由于太小了无法分配给申请内存空间的新进程的内存空闲区域
      • 避免:伙伴系统算法
    • 内部碎片

      • 描述:已经被分配出去的的内存空间大于请求所需的内存空间
      • 避免:slab 算法
  • 伙伴系统

    分配和回收(合并)大的、连续的内存块

  • SLAB

    应对小内存块频繁分配和释放

  • MMU 地址转换

    硬件电路,包含分段,分页两个部件

    分段机制:逻辑地址 > 线性地址

    分页机制:线性地址 > 物理地址

进程内存布局

内核 2.6.7 后 mmap 映射区域和堆相对扩展,直至耗尽虚拟地址空间中的剩余区域

操作系统内存分配函数

  • heap , brk()
  • mmap 映射区域, mmap() / munmap()

进程内存结构 mm_struct

brk() 是一个非常简单的系统调用, 只是简单地改变 mm_struct 结构的成员变量 brk 的值

系统调用通常提供一种最小的功能,库函数相比系统调用,则提供了更复杂的功能

glibc 中malloc 就是调用 sbrk() 将数据段的offset移动以来代表内存的分配和释放

sbrk() 函数在内核的管理下,将虚拟地址空间映射到内存,供 malloc() 函数使用

glibc ptmalloc

概念

  • 分配区

    主、非主

  • chunk

    常规

    特殊:top、mmaped、last_remainder

    合并

    切割

  • bin

    fast、small、large、unsorted


https://mp.weixin.qq.com/s/pdv5MMUQ9ACpeCpyGnxb1Q