通过malloc来窥探linux的内存管理

本文探讨了malloc如何在Linux中扩展堆内存,涉及进程地址空间、线性区、分段和分页的概念。malloc通过brk系统调用调整堆边界,利用线性区管理连续内存,而分页机制则将虚拟地址转换为物理地址,实现内存访问。
摘要由CSDN通过智能技术生成

malloc

malloc实际上是一个C语言库函数,有一套自己的内存管理方式,包括分配、释放和合并等动作。用户调用malloc后,malloc会进行一系列动作,最终返回一个虚拟地址出来。
我们知道malloc是申请堆的内存,当malloc调用时,会在堆里寻找一段空闲的足够大的内存空间,直接返回。如果当前已经找不到足够大小的空闲空间,那么malloc会通过系统调用brk申请扩展堆的空间,从而得到新的内存空间。

进程地址空间

与进程地址空间有关的全部信息都存放在内存描述符mm_struct里,由进程描述符的mm字段指向。相关结构体信息如下:
在这里插入图片描述
进程的内存布局大致如下图所示,malloc所申请的内存就是存放在堆(heap)里,堆的大小由内存描述符的start_brk和brk字段限定。
在这里插入图片描述

线性区

因为进程地址空间中存在多个段,不同段之间有可能不连续,而且访问权限也不相同,所以需要用一种方式将其管理起来。Linux通过一种名为线性区(memory region)的数据结构管理,类型为vm_area_struct,线性区所指向的是一段连

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值