内存管理
ddatsh
概念
-
内存碎片
-
外部碎片
- 描述 :还没有被分配出去,但由于太小了无法分配给申请内存空间的新进程的内存空闲区域
- 避免:伙伴系统算法
-
内部碎片
- 描述:已经被分配出去的的内存空间大于请求所需的内存空间
- 避免: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