1
目录
1. 问题........................................................................................................................................... 3
2. 基础知识 ................................................................................................................................... 4
2.1 X86 平台 Linux 进程内存布局 ..................................................................................... 4
2.1.1 32 位模式下进程内存经典布局 ...................................................................... 4
2.1.2 32 位模式下进程默认内存布局 ...................................................................... 5
2.1.3 64 位模式下进程内存布局 .............................................................................. 5
2.2 操作系统内存分配的相关函数 ................................................................................... 6
2.2.1 Heap 操作相关函数 ......................................................................................... 6
2.2.2 Mmap 映射区域操作相关函数 ....................................................................... 7
3. 概述........................................................................................................................................... 8
3.1 内存管理一般性描述 ................................................................................................... 8
3.1.1 内存管理的方法 ............................................................................................... 8
3.1.2 内存管理器的设计目标 ................................................................................. 10
3.1.3 常见 C 内存管理程序 ..................................................................................... 12
3.2 Ptmalloc 内存管理概述 .............................................................................................. 13
3.2.1 简介 ................................................................................................................. 13
3.2.2 内存管理的设计假设 ..................................................................................... 14
3.2.3 内存管理数据结构概述 ................................................................................. 14
3.2.4 内存分配概述 ................................................................................................. 19
3.2.5 内存回收概述 ................................................................................................. 21
3.2.6 配置选项概述 ................................................................................................. 22
3.2.7 使用注意事项 ................................................................................................. 23
4. 问题分析及解决 ..................................................................................................................... 24
5. 源代码分析 ............................................................................................................................. 26
5.1 边界标记法 ................................................................................................................. 26
5.2 分箱式内存管理 ......................................................................................................... 34
5.2.1 Small bins ........................................................................................................ 34
5.2.2 Large bins ........................................................................................................ 35
5.2.3 Unsorted bin .................................................................................................... 40
5.2.4 Fast bins ........................................................................................................... 42
5.3 核心结构体分析 ......................................................................................................... 44
5.3.1 malloc_state .................................................................................................... 44
5.3.2 Malloc_par ...................................................................................................... 47
5.3.3 分配区的初始化 ............................................................................................. 49
5.4 配置选项 ..................................................................................................................... 51
5.5 Ptmalloc 的初始化...................................................................................................... 53
5.5.1 Ptmalloc 未初始化时分配/释放内存 ............................................................ 53
5.5.2 ptmalloc_init()函数 ......................................................................................... 55
5.5.3 ptmalloc_lock_all(),ptmalloc_unlock_all(),ptmalloc_unlock_all2() ................ 60
5.6 多分配区支持 ............................................................................................................. 65
5.6.1 Heap_info ........................................................................................................ 65
5.6.2 获取分配区 ..................................................................................................... 66
评论0