PTMalloc介绍

Glibc一般采用ptmalloc2这个版本去管理内存。进程的内存区域分配如下:

|   Kernel Space             |

|   Undefined Region        |

|   Stack                   |

|    \|/                     |

|   Memory Mapping Region  |

|    /|\                     |

|   Head                    |

|   BSS Segment             |

|   Data Segment            |

|   Text Segment            |

一般对heap的操作提供了两种接口,一是brk()的系统调用,设置了heap的上边界。

对于mmap映射区域提供了mmap()和munmap两种系统调用,因为系统调用的代价很高,用mmap的区域很容易被释放,所以一般小区域的内存用brk申请,大区域的内存用mmap申请;

PtMalloc支持多线程,有一个主分配区域(main arena),有多个非主分配区。某个线程调用malloc时候。会先查看线程私有变量中是否已经存在一个分配区,如果存在则尝试加锁,如果加锁失败则会遍历一遍arena链表试图获取一个没有加锁的arana,如果依然获取不到则创建一个新的分配区(arena)。

PtMalloc的内存管理:

用户请求分配的内存再ptmalloc中使用chunk(组,大块,厚片)表示。每个chunk至少需要8个字节的额外开销。用户free掉的内存不会立马还给操作系统。Ptmalloc会统一管理heap和mmap区域的空闲chunk。避免频繁的系统调用。

Ptmalloc将相似大小的chunk用双向链表连在一起。这样的链表称为一个bin,Ptmalloc一个维护的128个bin,并用数组来维护这些bin。(就像一个hashmap一样,每个数组节点下面都有一个链表,这个链表就是bin)

数组中的第一个称为unsorted bin,数组中从2开始编号的前64个bin称为small bin,同一个small bin中的chunk大小相同。Small bin后面的bin称为large bin。

当释放一个chunk的时候,ptmalloc会检查它前后的chunk有咩有空闲的chunk,有空闲的chunk就会与其合并并且移动到一个bin也就是unsorted bin中,同时也会把

一些小的chunk(小于64b)放到一个fast bins中。

如果fast bins和bins都不能满足需求后,ptmalloc会设法在一个top chunk的空间分配内存,对于非主arena会先通过mmap申请一块大的内存给top chunk。

如果topchunk本身还是不够大, 分配程序会重新mmap分配一块内存chunk,并且将top chunk迁移到新的chunk上,如果free()的chunk刚好与top chunk相邻,那么这两个chunk就会合并成新的topchunk,如果topchunk的大小大于某个阈值,才会还给操作系统。主分配区类似,不过sbrk()的分配和调整topchunk的大小,只有在heap的顶部连续内存空闲超过阈值的时候才会回收内存。

需要的chunk足够大,而且fast bins和bins都不能满足要求,甚至topchunk本身也不能满足分配需求时候,ptmalloc会使用mmao来直接使用内存映射关联到进程空间。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/906014.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

黑马JavaWeb-day04

文章目录 mavenmaven 简介maven 安装IDEA集成maven创建maven项目Maven 坐标依赖管理单元测试 Web入门Springboot 入门HTTP协议三层架构分层解耦 I O C & D I IOC\&DI IOC&DI入门 I O C IOC IOC和 D I DI DI详解 maven maven 简介 maven: M a v e n Maven Maven是…

什么是FUSE用户态文件系统

零. 文件系统 1. 为什么要有文件系统 文件系统是操作系统中管理文件和目录的一种机制。它提供了组织、存储、检索和更新文件的方法,主要如下: 数据组织:文件系统将数据组织成文件和目录,使用户能够更方便地管理和查找文件。每个…

品牌怎么找到用户发的优质内容,进行加热、复制?

在,相对传统媒体来说,社交媒体营销具有更高的成本效益。品牌可以通过相对较低的成本达到大量潜在客户,尤其是通过口碑营销和内容分享,可以实现倍增的传播效果。在社媒营销的过程中,去找到与品牌有关的优质、正向内容&a…

梁山派入门指南3——串口使用详解,包括串口发送数据、重定向、中断接收不定长数据、DMA+串口接收不定长数据,以及对应的bsp文件和使用示例

梁山派入门指南3——串口使用详解,包括串口发送数据、重定向、中断接收不定长数据、DMA串口接收不定长数据,以及对应的bsp文件和使用示例 1. 串口发送数据1.1 串口简介1.2 梁山派上的串口开发1.3 bsp_uart文件(只发送不接收,兼容串…

notepad++ compare插件的离线下载和安装

一、离线安装 去改地址找到最新的插件:https://github.com/notepad-plus-plus/nppPluginList/blob/master/doc/plugin_list_x64.md下载之后复制到插件文件夹,插件文件夹的打开方式如下 注意目录: 二、问题汇总 (1&#xff09…

你的网站需要防护吗?

你的网站经常被恶意爬虫,重要数据被批量搬运吗? 你想知道你的网站是不是安全的,有没有被 xss攻击、sql注入、命令注入等等这些乱七八糟的攻击手段攻击吗? 2014年我还是学生的时候,负责学院官网的维护,一…

在postman设置请求里带动态token,看看这两种方法!

问题描述 在使用postman调试接口时,遇到一些需要在请求里加上token的接口,若token出现变化,需要手动修改接口的token值,带来重复的工作量,翻看postman使用手册后,我发现了两种方法可以解决这个问题。 01 …

商家如何在高德地图上申请店铺入驻?

在当今数字化时代,互联网成为了消费者寻找商品和服务的主要渠道。高德地图作为国内领先的地图导航软件,不仅拥有庞大的用户基础,还为商家提供了优质的店铺展示平台。因此,对于实体店商家而言,入驻高德地图是提升店铺曝…

Java并发常见面试题总结(下)

Map(重要) HashMap 和 Hashtable 的区别 线程是否安全: HashMap 是非线程安全的,Hashtable 是线程安全的,因为 Hashtable 内部的方法基本都经过synchronized 修饰。(如果你要保证线程安全的话就使用 ConcurrentHashMa…

数字化导师坚鹏:2025年银行开门红营销规划、方法及案例工作坊

2025年银行开门红营销规划、方法及案例工作坊 ——数字化赋能 新策略启航 开门红必胜 课程背景: 面对即将打响的开门红战役,很多银行存在以下问题: 不知道如何分析银行开门红面临形势及机遇? 不知道如何制定科学高效的开…

普通的Java程序员,需要深究源码吗?

作为Java开发者,面试肯定被问过多线程。对于它,大多数好兄弟面试前都是看看八股文背背面试题以为就OK了;殊不知现在的面试官都是针对一个点往深了问,你要是不懂其中原理,面试就挂了。可能你知道什么是进程什么是线程&a…

ctfshow——web(总结持续更新)

文章目录 1、基础知识部分2、php伪协议2.1 php://input协议2.2 data://text/plain协议 3、webshell连接工具3.1 蚁剑连接一句话木马 4、各个web中间件重要文件路径4.1 Nginx 5、sqlmap使用6、php特性6.1 md5加密漏洞 7、TOP 10漏洞7.1 SQL注入 1、基础知识部分 识别base64编码…

MYSQL---TEST5(Trigger触发器综合练习)

触发器Trigger 数据库mydb16_trigger创建 表的创建 goods create table goods( gid char(8) primary key, #商品号 name varchar(10), #商品名 price decimal(8,2), #价格 num int;) #数量orders create tabl…

layui 自定义验证单选框必填

对于输入框类型必填验证,只需要在 input 输入框加入 lay-verify "required" 即可。但对于单选按钮这种特殊的该怎么办呢?layui 为我们提供了自定义验证。 1. 在单选按钮上添加自定义验证的名称 2. 验证规则如下 // 单选框自定义验证form.ve…

OpenCV开发笔记(八十二):两图拼接使用渐进色蒙版场景过渡缝隙

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/143432922 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV…

「C/C++」C/C++标准库 之 #include<ctime> 时间日期库

✨博客主页何曾参静谧的博客📌文章专栏「C/C」C/C程序设计📚全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasoli…

安达发|零部件APS车间排程系统销售预测的优点

2024制造业面临着前所未有的挑战与机遇。为了保持竞争力,企业必须确保其生产系统能够高效、灵活地运作。在这方面,采用高级计划与排程系统,特别是零部件APS车间排程系统的预测方法,已成为提升生产效率和响应能力的关键策略。这种系…

【笔试刷题】笔记4

目录 1、过河卒 dfs bfs 动态规划 2、扑克牌顺子 排序 模拟 找规律 3、最长回文子串 中心拓展法 1、过河卒 5493. 过河卒 - AcWing题库 这道题我们很容易就能够想到dfs或bfs&#xff0c;但这两种算法都是会超时的 dfs #include <iostream> #include <v…

大模型中的token是什么;常见大语言模型的 token 情况

目录 大模型中的token是什么 常见大语言模型的 token 情况 大模型中的token是什么 定义 在大模型中,token 是文本处理的基本单位。它可以是一个字、一个词,或者是其他被模型定义的语言单元。简单来说,模型在理解和生成文本时,不是以完整的句子或段落为单位进行一次性处理…

kafka里的consumer 是推还是拉?

大家好&#xff0c;我是锋哥。今天分享关于【kafka里的consumer 是推还是拉&#xff1f;】面试题&#xff1f;希望对大家有帮助&#xff1b; kafka里的consumer 是推还是拉&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在Kafka中&#xff0c;消费者&…