虚拟地址空间与堆区

本文探讨了虚拟地址空间如何通过减少内存移动来提高内存利用率,同时保证进程安全。特别关注堆区的动态分配策略,包括malloc和free的作用,以及堆区如何通过内核调用来实现动态扩容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

虚拟地址空间:为了减少内存移动,提高利用率,隔离进程保护安全,加入了虚拟的地址,把内存分割成很多页映射存储需要经过转换才能访问实际物理内存。
栈区每个线程独享,全局变量区、堆区是每个进程独享的内存。
因为堆区一开始不知道要使用多少内存,需要动态开辟,堆区一开始向系统申请一块大内存,然后零售给程序,free只是归还给虚拟空间,并未真正释放,如果有malloc函数扫描到之前的释放的块那可直接使用,而不用向系统频繁申请空间。等到调用malloc函数时查找块从头到尾遍历完了实在没有空闲块就会移动堆区有效指针break以实现扩容,是内核调用,花费时间。如果用到了新的页面一个页面4k,就要分配物理页。如果指针在同一个页面里面移动就不用。堆区是隐式链表保存着内存块区域大小以及使用状态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值