对于空闲的
chunk
,
ptmalloc
采用分箱式内存管理方式,根据空闲
chunk
的大小和处于的状态将其放在四个不同的
bin
中,这四个空闲
chunk
的容器包括
fast bins
,
unsorted bin
,
small bins
和
large bins
。
Fast bins
是小内存块的高速缓存,当一些大小小于
64
字节的
chunk
被回收时,首先会放入
fast bins
中,在分配小内存时,首先会查看
fast bins
中是否有合适的内存块,如果存在,则直接返回
fast bins
中的内存块,以加快分配速度。
Usorted bin
只有一个,回收的
chunk
块必须先放到
unsorted bin
中,分配内存时会查看
unsorted bin
中是否有合适的
chunk
,如果找到满足条件的
chunk
,则直接返回给用户,否则将
unsorted bin
的所有
chunk
放入
small bins
或是
large bins
中。
Small bins
用于存放固定大小的
chunk
,共
64
个
bin
,最小的
chunk
大小为
16
字节或
32
字节,每个
bin
的大小相差
8
字节或是
16
字节,当分配小内存块时,采用精确匹配的方式从
small bins
中查找合适的
chunk
。
Large bins
用于存储大于等于
512B
或
1024B
的空闲
chunk
,这些
chunk
使用双向链表的形式按大小顺序排序,分配内存时按最近匹配方式从
large bins
中分配
chunk
。
5
.2.1
Small bins
ptmalloc
使用
small bins
管理空闲小
chunk
,每个
small bin
中的
chunk
的大小与
bin
的
index
有如下关系:
Chunk_size=2 *
SIZE_SZ * index
在
SIZE_SZ
为
4B
的平台上,
small bins
中的
chunk
大小是以
8B
为公差的等差数列,最大的
chunk
大小为
504B
,最小的
chunk
大小为
16B
,所以实际共
62
个
bin
。分别为
16B
、
24B
、
32B
,……,
504B
。在
SIZE_SZ
为
8B
的平台上,
small bins
中的
chunk
大小是以
16B
为公差的等差数列,最大的
chunk
大小为
1008B
,最小的
chunk
大小为
32B
,所以实际共
62
个
bin
。分别为
32B
、
48B
、
64B
,……,
1008B
。
ptmalloc
维护了
62
个双向环形链表(每个链表都具有链表头节点,加头节点的最大作用就是便于对链表内节点的统一处理,即简化编程),每一个链表内的各空闲
chunk
的大小一致,因此当应用程序需要分配某个字节大小的内存空间时直接在对应的链表内取就可以了,这样既可以很好的满足应用程序的内存空间申请请求而又不会出现太多的内存碎片。我们可以用如下图来表示
在
SIZE_SZ
为
4B
的平台上
ptmalloc
对
512B
字节以下的空闲
chunk
组织方式(所谓的分箱机制)。
分享到:
相关推荐
《Glibc内存管理--ptmalloc2源代码分析》 Glibc是GNU项目提供的C语言标准库,它在Linux系统中扮演着至关重要的角色。其中,内存管理是Glibc中的核心部分,它负责程序运行时的内存分配与释放,对系统的性能有着深远...
在分析glibc内存管理的ptmalloc源代码之前,我们需要先了解一些基础知识,包括操作系统对内存的分配和管理方法,以及glibc内存分配机制。 内存管理是操作系统的一个核心功能,它负责维护和管理计算机系统中的物理和...
《glibc内存管理ptmalloc源代码分析》是一份深入探讨Linux系统中glibc库内存管理机制的专业资料。glibc,全称GNU C Library,是Linux操作系统下广泛使用的C语言标准库,其中ptmalloc是glibc中负责动态内存分配的核心...
在深入探讨Glibc内存管理的Ptmalloc源代码之前,我们先来了解一下内存管理的基本概念。内存管理是操作系统和编程语言库中的核心组件,它负责有效地分配和回收内存,以确保程序的高效运行和资源的有效利用。 2.1 X86...
通过对ptmalloc源代码的深入分析,可以找到潜在的优化点,如调整分配策略、改进数据结构设计等,以解决这些问题。 #### 13. 使用注意事项 虽然ptmalloc提供了强大的内存管理功能,但在使用过程中也需要注意一些事项...
glibc内存管理ptmalloc源代码分析
在深入探讨Glibc内存管理的Ptmalloc源代码之前,我们先来了解一下内存管理的基本概念和Glibc中的Ptmalloc2。内存管理是操作系统和应用程序中的核心部分,它负责为程序分配和释放内存,以确保资源的有效利用和避免...
### glibc内存管理ptmalloc源代码分析 #### 1. 问题 在开发一款NoSQL系统的过程中,我们遇到一个令人头疼的问题:系统中使用的内存管理模块,在高并发、高负载的场景下,虽然已将内存释放给C运行时库(即glibc),...
### glibc内存管理ptmalloc源代码分析-清晰版 #### 一、背景介绍与文档概览 本文档针对glibc中的ptmalloc2内存管理模块进行了深入的源代码分析,旨在帮助开发者更好地理解ptmalloc的工作原理及其内部机制。文档...
`glibc`是GNU项目提供的C标准库,而`ptmalloc`是它的一部分,负责程序的内存分配与管理。`ptmalloc`优化了内存分配效率,但在某些情况下也可能成为安全漏洞的来源。 `GDB`(GNU调试器)是一款强大的调试工具,它...
本文将深入探讨内存管理的基本原理及其调试方法,特别关注于Linux环境下的Glibc内存管理库以及Ptmalloc2的具体实现。 #### 二、基础知识 ##### 2.1 X86平台Linux进程内存布局 **2.1.1 32位模式下进程内存经典布局...
通过对glibc库中的ptmalloc源代码进行深入分析,我们不仅了解了其内部实现机制,还能够针对实际应用中的内存管理问题提出有效的解决方案。这对于提升程序性能、减少内存碎片以及提高系统的整体稳定性具有重要意义。...
学习自《glibc内存管理ptmalloc源代码分析》庄明强 著 部分资料参考自互联网 chunk 描述: 当用户通过malloc等函数申请空间时,实际上是从堆中分配内存 目前 Linux 标准发行版中使用的是 glibc 中的堆分配器:...
《堆漏洞的利用技巧》 堆溢出是计算机安全领域中的一个重要...同时,阅读glibc内存管理的源代码分析对于提高理解和实践能力非常有帮助。通过这些知识的学习,不仅可以增强安全意识,也能提升在CTF竞赛中的攻防能力。