ptmalloc堆内存管理机制(主要讨论Linux x86下32位系统)
- bin(chunk容器)
ptmalloc将相似大小的 chunk 用双向链表链接起来,这样的一个链表被称为一个 bin。 Ptmalloc 一共维护了 128 个 bin,并使用一个数组来存储这些 bin,这个数组被成为bin数组。
bin数组结构如下:
在32位平台下,bin[0] 和 bin[127] 是不存在的,因为最小的 chunk 为 16B, small bin 一共 62 个, large bin 一共 63 个,算上 bin[1] 加起来一共 128 个 bin。
其中 small bin 可以看成是公差为8的等差数列,其相邻两个 bin 的 chunk 的大小相差8B,如上图所示。large bin 的每个 bin 中的 chunk 大小不是一个固定的等差数列,而是分成六组,每组 bin 是一个固定公差的等差数列,每组的 bin 数量依次为 32、 16、 8、 4、 2、 1,公差依次为 64B、 512B、4096B、32768B、 262144B 等。
正是基于 bin 数组的这种关系,当用户给出一个需要申请的空间大小,ptmalloc 会很容易的确定改大小空间在哪个 bin 里。
fast bin:
- 不大于 max_fast(默认值为 64B)的 chunk 被释放后,首先会被放到 fast bin 中, fast bin 中的 chunk 并不改变它的使用标志 P。 这样也就无法将它们合并, 当需要给用户分配的 chunk 小于或等于 max_fast 时, ptmalloc 首先会在 fast bin 中查找相应的空闲块,然后才会去查找 bin 中的空闲 chunk。在某个特定的时候(在内存释放合并 top chunk 时,如果合并后的 chunk 的大小大于 FASTBIN_CONSOLIDATION_THRESHOLD(默认64KB), 会触发进行 fast bins 的合并操作),ptmalloc会遍历 fast bin中的 chunk,18将相邻的空闲 chunk 进行合并, 并将合并后的 chunk 加入 unsorted bin 中,然后再将 usorted bin 里的 chunk 加入 bins 中。
ptmalloc堆内存管理机制(主要讨论Linux x86下32位系统)相关推荐
- Windows X86(32位系统)为什么可使用最大内存4G,再加内存条,内存也不会增加?
①X86就是指32位系统(位:cpu一次能处理的最大位数....所以64位比32位速度快很多) ②内存条:CPU可通过总线地址,并进行读写操作的电脑部件. 电脑内存(RAM,random sccess ...
- Linux堆内存管理深入分析
0 前言 近年来,漏洞挖掘越来越火,各种漏洞挖掘.利用的分析文章层出不穷.从大方向来看,主要有基于栈溢出的漏洞利用和基于堆溢出的漏洞利用两种.国内关于栈溢出的资料相对较多,这里就不累述了,但是关于堆溢 ...
- Linux堆内存管理深入分析(上)
Linux堆内存管理深入分析 (上半部) 作者:走位@阿里聚安全 0 前言 近年来,漏洞挖掘越来越火,各种漏洞挖掘.利用的分析文章层出不穷.从大方向来看,主要有基于栈溢出的漏洞利用和基于堆溢出的漏 ...
- Linux堆内存管理深入分析 (上半部)【转】
转自:http://www.cnblogs.com/alisecurity/p/5486458.html Linux堆内存管理深入分析 (上半部) 作者:走位@阿里聚安全 0 前言 近年来,漏洞挖掘越 ...
- Linux内存管理机制研究
Linux内存管理机制研究 查看linux系统中处于free状态的内存有两个角度,一个是从内核的角度来看,一个是从应用层的角度来看的. 1.从内核的角度来看free的内存,就是内核目前可以直接分配到, ...
- 二进制安全:ptmalloc内存管理机制与堆块chunk源码分析
敬告: <中华人民共和国刑法>第三百八十六条[破坏计算机系统罪:网络服务渎职罪]违反国家规定,对计算机信息系统功能进行删除.修改.增加.干扰,造成计算机系统不能正常运行,后果严重的,处五年 ...
- linux堆内存管理深入分析,【技术分享】Linux堆溢出之Fastbin Attack实例详解
1. 摘要 在近几年各大CTF比赛中,看到有很多次pwn类别题中出现fastbin攻击的情况,例如今年的defcon,RCTF,胖哈勃杯,0CTF final等等 ,fastbin attack是堆漏 ...
- linux内存管理机制以及free命令详解
linux内存管理机制以及free命令详解 一.linux内存管理机制 1.物理内存和虚拟内存 直接从物理内存读写数据要比从硬盘读写数据要快的多,因此,我们希望所有数据的读取和写入都在内存完成,而内存 ...
- 【Linux 内核 内存管理】Linux 内核堆内存管理 ① ( 堆内存管理 | 内存描述符 mm_struct 结构体 | mm_struct 结构体中的 start_brk、brk 成员 )
文章目录 一.堆内存管理 二.内存描述符 mm_struct 结构体 三.mm_struct 结构体中的 start_brk.brk 成员 一.堆内存管理 Linux 操作系统中的 " 堆内 ...
最新文章
- Nature:微生物培养技术发展迅猛,未来要搞定一切!
- 痛并快乐的造轮子之旅:awk访问数据库之旅
- 博物馆自动灭火系统应如何选择
- 7.Phong 和 BlinnPhong
- 图片裁剪和异步上传插件--一步到位(记录)
- 【B】替换 Quartz.net 默认使用的 MySql.Data 为 Mysqlconnector 的学习过程
- Java 文件目录显示
- 吴恩达深度学习 —— 2.16 关于python/numpy向量的说明
- linux mysql 主从数据库_【Linux】【MySQL】MySQL主从数据库
- SAP License:值得一看的ERP问题
- [转] 有关java中两个整数的交换问题
- Javascript中的Trait与代码重用
- android打开关闭gps定位服务,【Android】使用模拟位置,关闭模拟位置后GPS启动不了...
- 《概率论与数理统计》(浙大第四版)第七章总结笔记(纯手写)
- 服务器虚拟内存最佳设置范围,虚拟内存有什么用?虚拟内存设置多少合适?
- linux内存显示少,linux 显示的内存怎么少于我实际的物理内存
- 内蒙古巴丹吉林沙漠锁定2021中国唯一申遗名额
- 30岁张一鸣创业成功秘密武器,OKR“失控”管理法
- ROC和 区别p值和q值
- 加州房价篇 (一) : 了解数据
热门文章
- ASP.NET知识集
- 在数据库中outlet、code、outline为联合组件。hibarnate插入可如此插入
- 单片机编程文件组织形式(个人编程规范)
- java代码编写的文本特征提取_Test1 java语言写的特征提取源代码,有搞文字识别的可以下载一看,简单易学 Develop 274万源代码下载- www.pudn.com...
- 按条件分类_保税仓储企业能否同时存储非保货物?“仓储货物安装台分类监管”如何申请?...
- java 保存bufferedimage_java - 如何将BufferedImage保存为Fi
- 免装版_无缝贴图制作软件 PixPlant2中文免装版
- 新唐M031学习笔记(一)定时器基础计数应用
- 图灵计算机模型意义,图灵机有什么意义_学习图灵机模型中遇到的问题
- 160 - 22 CarLitoZ.1