当前位置: 首页 > news >正文

glibc堆

堆的概述

在内存管理领域,glic通过brk和mmap两大系统调用,构建了一套高效的堆内存管理机制。层级化架构,包含分配区(Arena) 堆(Heap) 内存块(Chunk). 主Arena依赖brk系统调用实现内存分配,而子Arena通过mmap完成内存获取.多线程程序运行时,每个线程通常会有自己的Arena,主线程与子线程的堆空间各自独立管理,互不干扰.

fast bins,small bins large bins,unsorted bin 在具体实现malloc和free函数时.glibc遵循“先小后大 最佳适配”原则.

brk()和sbrk()

include<unistd.h>
int brk(void* end_data_segment);
void *sbrk(intptr_t increment);
图片
brk()的参数是一个指针,用来设置program_break指向的位置.sbrk()函数的参数increment(可以是负值)用于和program_break相加调整program_break的值,成功执行后brk()函数会返回0,sbrk()函数会返回上一次program_break值.也就是说,设置increment为0,可以获得当前program_break的值.

mmap()和unmmap()

include<sys/mman.h>
void *mmap(void *addr,size_t length, int prot, int flags, int fd, off_t offset);
int munmap(void *addr, size_t length);

当用户申请内存过大(在大多数系统中,阈值通常为128KB)时,ptmalloc2会选择通过mmap()函数创建匿名映射段供用户使用,并通过unmmap()函数回收.

Glibc堆内存管理核心机制

用自己的话来概括一下吧,上文已经提到 有Arena Heap Chunk,这三个主要的元素在堆内存管理上发挥作用。
首先,Arena分为主分配区和子分配区,其中主分配区的Heap主要有brk系统调用,即修改指向位置和加减数字来决定大小。主Arena只有一个!
子分配区可以有多个,主要通过mmap系统调用创建,子Arena之间通过链表连接,物理空间不需要连续。

Chunk
图片

在malloc调用后,chunk会依次在fast bins,small bins和large bins, unsorted bins中寻找合适的内存块,也就是说如果没找到,会被直接放在unsorted bins中

glib中堆内存分配的基本思路就是,首先找到本线程的Arena,然后优先在Arena对应的回收箱中寻找合适大小的内存,在内存箱中所有内存块均小于所需求的大小,那么就会去top chunk分割,但是如果top chunk的大小也不足够,此时不一定要拓展top,检查所需的内存是否大于128k,若大于,则直接使用系统调用mmap分配内存,如果小于,就进行top chunk的拓展,即堆的拓展,拓展完成后,从top chunk中分配内存,剩余部分成为新的top chunk。

http://www.hskmm.com/?act=detail&tid=23503

相关文章:

  • 完整教程:从 “T+1” 到 “秒级”:MySQL+Flink+Doris 构建实时数据分析全链路
  • 平均数
  • 质数表
  • 小作业 11
  • 深入解析:【RabbitMQ】原理解析
  • 一次insert插入多条数据比insert循环插入数据效率高多少?
  • 内存映射文件
  • 详细介绍:Java安全“幽灵”:深入剖析内存马的原理、注入与查杀
  • 2025波形护栏厂家 TOP 企业品牌推荐排行榜,山东波形护栏防撞,三波,二波,双波,喷塑,公路,热浸锌,浸塑,镀锌波形护栏公司推荐!
  • 好数
  • 2025.10 做题记录
  • 页面分配策略
  • 2025防火皮革厂家TOP企业品牌推荐排行榜,B1级防火皮革,建筑防火皮革,审讯室防火皮革,邮轮级防火皮革,软包防火皮革公司推荐
  • 最强AI图片变视频工具,无内容限制,偷偷下载收藏
  • 2025年电子设备行业最受欢迎的5款CRM推荐
  • 2025年铝板厂家TOP企业品牌推荐排行榜,1060铝板,1100铝板,3003铝板,3004铝板,5052铝板,5083铝板,6061铝板,6063铝板,6082铝板公司推荐!
  • 2025年防撞软包厂家TOP企业品牌推荐排行榜,询问室,幼儿园,B1墙板,防撞软包门防火墙板,阻燃墙板,防撞软包家具,桌椅,马桶,洗手盆公司推荐
  • HTTP 错误 403.14 - Forbidden Web 服务器被配置为不列出此目录的内容——错误代码:0x00000000 - 教程
  • 2025年防撞软包厂家TOP企业品牌推荐排行榜,谈话室,留置病房,教育中心,体育馆,约谈室,监察机构,墙体,阻燃,醒酒室,墙面,洽谈室,留置室,防撞软包洽谈桌公司推荐
  • MySQL 全量 + 增量备份脚本(RPM 安装)实践与疑问解析
  • 2025最新展会搭建公司推荐排行榜:服务商创意定制与全流程服务能力深度解析
  • 10 3
  • 2025磁选机厂家TOP企业品牌推荐排行榜,立环磁选机,高梯度磁选机,立环高梯度磁选机,油冷立环磁选机公司推荐
  • 医疗设备厂家不要再盲选了,专业的医疗DMS经销商管理软件来了!
  • 2025最新编织袋生产厂家推荐排行榜:涵盖牛皮纸、塑料、PP 彩膜等品类,助力企业精准甄选可靠合作伙伴
  • AT_abc266_g [ABC266G] Yet Another RGB Sequence
  • 2025超市货架厂家 TOP 企业品牌推荐排行榜,云南超市货架,昆明超市货架,西南超市货架推荐这十家公司!
  • 深入解析:Visual RM 用智能引擎重塑企业协作新模式!
  • Windows 11 共享打印机设置
  • Win7下bat条件满足语句不执行的奇怪案例-延迟变量解决