当前位置: 首页 > 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.gsyq.cn/news/15180.html

相关文章:

  • 小作业 11
  • US$948 WOYO UC009 Ultrasonic Cutter for Cutting Plastic
  • 深入解析:【RabbitMQ】原理解析
  • 2025年电子设备行业最受欢迎的5款CRM推荐
  • AT_abc266_g [ABC266G] Yet Another RGB Sequence
  • 深入解析:Visual RM 用智能引擎重塑企业协作新模式!
  • Win7下bat条件满足语句不执行的奇怪案例
  • 3.8 材料链路层设备 (答案见原书 P122)
  • for (EmpExpr empExpr : exprList) {}语法糖
  • Rust泛型详解 - 实践
  • 2025染井吉野樱公司 TOP 种植服务推荐排行榜,染井吉野樱花苗,五公分染井吉野樱,十公分染井吉野樱,染井吉野樱批发,染井吉野樱基地,染井吉野樱花树公司推荐
  • 详细介绍:LeetCode热题100(1-7)
  • PySide6 之登录界面设计
  • Jupyter notebook 虚拟环境(服务)EnvironmentLocationNotFound: Not a conda environment
  • 20届-测试面经-华为OD - 指南
  • 【大信息技术】ClickHouse配置详细解读
  • 2025年硫酸铵厂家权威推荐榜:实力生产与优质供应口碑之选
  • vim中leader和localleader对比
  • 详细介绍:[论文阅读] AI + 软件工程 | 从“事后补救”到“实时防控”,SemGuard重塑LLM代码生成质量
  • 国产GPU/AI芯片第三篇 - 沐曦
  • 完整教程:VLM Prompt优化之 DynaPrompt(ICLR 2025)论文总结
  • 2025.10.3——1绿
  • 2025冷水机厂家TOP企业品牌推荐排行榜,风冷式,水冷式,螺杆式,低温,工业,防爆,分体式,风冷热泵,风冷低温,风冷螺杆,水冷螺杆冷水机推荐这十家公司!
  • 完整教程:Next.js项目演示(从零创建Next.js项目)Next.js入门实战
  • 【Java并发】揭秘Lock体系 -- condition等待通知机制 - 详解
  • 基于 CI/CD(Jenkins)将 Spring Boot 应用自动部署到 Kubernetes 集群 - 实践
  • 2025 年彩石瓦厂家 TOP 企业品牌推荐排行榜,云南彩石瓦,昆明彩石瓦,金属彩石瓦,屋顶彩石瓦,凉亭彩石瓦推荐这十家公司!
  • 2025 年地毯清洗服务商 TOP 服务公司推荐排行榜,天津,滨海新区地毯清洗,写字楼地毯清洗,办公室地毯清洗,办公楼地毯清洗,大厦地毯清洗,会议室地毯清洗,办公商用地毯清洗公司推荐!
  • 鸿蒙操作系统 HarmonyOS 5 能否在X86电脑平台上运行?
  • 2025蜂窝大板厂家 TOP 企业品牌推荐排行榜,云南,昆明蜂窝大板,吊顶,铝门,别墅,体育,客厅蜂窝大板推荐这十家公司!