堆(glibc)

堆概述
堆简介
堆是程序虚拟地址空间的一块连续的线性区域,它由低地址向高地址方向增长,用来提供动态分配的内存(用户申请时启用)。只有虚拟地址被真正使用时才会与物理地址形成映射关系。

堆管理器
管理堆的程序,介于用户与系统内核之间。响应用户请求向系统申请内存,一次会申请很大内存,根据用户需求分配堆,堆空间不够时才会再次与系统交互;用户释放内存后内存先有堆管理器管理,不直接返回系统。

堆的申请与释放
相关函数
malloc和free
malloc(size) : 用户通过malloc函数申请size大小的堆内存,malloc 函数返回对应大小字节的内存块的指针
free(ptr) : 用户通过free函数释放相应指针指向的堆内存

brk()和sbrk()
malloc和free后面真正与系统进行交互的函数时brk()和sbrk(),还有mmap、unmmap等

堆的大小通过brk()和sbrk()函数移动program_break使堆增长。
brk(ptr):参数是一个指针,用于设置program_break指向的位置
sbrk(increment):参数与program_break相加来调整program_break的值
执行成功brk()返回0,sbrk()返回上一次program_break的值

初始时,堆的起始地址 start_brk 以及堆的当前末尾 brk 指向同一地址。

不开启 ASLR 保护时,start_brk指向 data/bss 段的结尾。
开启 ASLR保护时,start_brk 指向data/bss 段结尾后的随机偏移处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值