Glibc 内存管理 Ptmalloc2 源代码分析 PDF 文档

发布于 2022-12-14 21:04:20 字数 2589 浏览 118 评论 0

项目组正在研发的一个类似数据库的 NoSql 系统,遇到了 Glibc 的内存暴增问题。现象如下:在我们的 NoSql 系统中实现了一个简单的内存管理模块,在高压力高并发环境下长时间运行,当内存管理模块的内存释放给 C 运行时库以后,C 运行时库并没有立即把内存归还给操作系统,比如内存管理模块占用的内存为 10GB,释放内存以后,通过 TOP 命令或者/proc/pid/status 查看进程占用的内存有时仍然为 10G,有时为 5G,有时为 3G,etc,内存释放的行为不确定。

目录
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
5.6.3 Arena_get2() ......... 68
5.6.4 _int_new_arena() .. 70
5.6.5 New_heap() ........... 72
5.6.6 get_free_list()和 reused_arena() ............... 75
5.6.7 grow_heap(),shrink_heap(),delete_heap(),heap_trim() ....... 77
5.7 内存分配 malloc ............... 82
5.7.1 public_mALLOc() ... 82
5.7.2 _int_malloc() ......... 83
5.8 内存释放 free ................. 116
5.8.1 Public_fREe() ....... 116
5.8.2 _int_free() ........... 118
5.8.3 sYSTRIm()和 munmap_chunk() .......... 126

下载地址:https://www.wenjiangs.com/wp-content/uploads/2022/12/NqYyx7DAaOaT1nXC.zip

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

JSmiles

生命进入颠沛而奔忙的本质状态,并将以不断告别和相遇的陈旧方式继续下去。

0 文章
0 评论
84960 人气
更多

推荐作者

安静被遗忘

文章 0 评论 0

喔爱吃橙子

文章 0 评论 0

草莓味的萝莉

文章 0 评论 0

梦里兽

文章 0 评论 0

mb_83J3Cyxa

文章 0 评论 0

时间海

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文